This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]