This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: PING: PATCH: Use int64 for x86 options
On Wed, Aug 17, 2011 at 12:28 PM, Joseph S. Myers
<joseph@codesourcery.com> wrote:
> On Sun, 7 Aug 2011, H.J. Lu wrote:
>
>> HOST_BITS_PER_WIDE_INT isn't defined in target library.
>> I need to check if HOST_BITS_PER_WIDE_INT is defined
>> first. ?Here is the updated patch.
>
> As I said in <http://gcc.gnu.org/ml/gcc/2011-07/msg00488.html>, you need
> to check all CLVC_* uses for cases that need updating for HOST_WIDE_INT
> fields. ?This patch fails to update option_enabled and get_option_state.
>
Here is the additional patch.
Thanks.
H.J.
---
diff --git a/gcc/ChangeLog.isa b/gcc/ChangeLog.isa
index a8f7d0e..fe52888 100644
--- a/gcc/ChangeLog.isa
+++ b/gcc/ChangeLog.isa
@@ -1,3 +1,15 @@
+2011-08-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ * opts-common.c (get_option_state): Check cl_host_wide_int
+ for CLVC_EQUAL size.
+
+2011-08-17 H.J. Lu <hongjiu.lu@intel.com>
+
+ * opts-common.c (set_option): Check cl_host_wide_int for
+ CLVC_EQUAL.
+ (option_enabled): Check cl_host_wide_int for CLVC_EQUAL,
+ CLVC_BIT_CLEAR and CLVC_BIT_SET.
+
2011-08-07 H.J. Lu <hongjiu.lu@intel.com>
* opth-gen.awk: Check number of mask bits only if
diff --git a/gcc/opts-common.c b/gcc/opts-common.c
index 1c2138f..0b86764 100644
--- a/gcc/opts-common.c
+++ b/gcc/opts-common.c
@@ -1088,9 +1088,14 @@ set_option (struct gcc_options *opts, struct
gcc_options *opts_set,
break;
case CLVC_EQUAL:
- *(int *) flag_var = (value
- ? option->var_value
- : !option->var_value);
+ if (option->cl_host_wide_int)
+ *(HOST_WIDE_INT *) flag_var = (value
+ ? option->var_value
+ : !option->var_value);
+ else
+ *(int *) flag_var = (value
+ ? option->var_value
+ : !option->var_value);
if (set_flag_var)
*(int *) set_flag_var = 1;
break;
@@ -1188,13 +1193,22 @@ option_enabled (int opt_idx, void *opts)
return *(int *) flag_var != 0;
case CLVC_EQUAL:
- return *(int *) flag_var == option->var_value;
+ if (option->cl_host_wide_int)
+ return *(HOST_WIDE_INT *) flag_var == option->var_value;
+ else
+ return *(int *) flag_var == option->var_value;
case CLVC_BIT_CLEAR:
- return (*(int *) flag_var & option->var_value) == 0;
+ if (option->cl_host_wide_int)
+ return (*(HOST_WIDE_INT *) flag_var & option->var_value) == 0;
+ else
+ return (*(int *) flag_var & option->var_value) == 0;
case CLVC_BIT_SET:
- return (*(int *) flag_var & option->var_value) != 0;
+ if (option->cl_host_wide_int)
+ return (*(HOST_WIDE_INT *) flag_var & option->var_value) != 0;
+ else
+ return (*(int *) flag_var & option->var_value) != 0;
case CLVC_STRING:
case CLVC_ENUM:
@@ -1221,7 +1235,9 @@ get_option_state (struct gcc_options *opts, int option,
case CLVC_BOOLEAN:
case CLVC_EQUAL:
state->data = flag_var;
- state->size = sizeof (int);
+ state->size = (cl_options[option].cl_host_wide_int
+ ? sizeof (HOST_WIDE_INT)
+ : sizeof (int));
break;
case CLVC_BIT_CLEAR: