spe.h (__ev_create_sfix32_fs): Change macro into new function.
authorAldy Hernandez <aldyh@redhat.com>
Tue, 26 Nov 2002 07:28:02 +0000 (07:28 +0000)
committerAldy Hernandez <aldyh@gcc.gnu.org>
Tue, 26 Nov 2002 07:28:02 +0000 (07:28 +0000)
2002-11-25  Aldy Hernandez  <aldyh@redhat.com>

        * config/rs6000/spe.h (__ev_create_sfix32_fs): Change macro into
        new function.
        (__ev_create_ufix32_fs): Same.
        (__ev_get_sfix32_fs_internal): New.
        (__ev_get_sfix32_fs): Define to use function.
        (__ev_get_ufix32_fs_internal): New.
        (__ev_get_ufix32_fs): Define to use function.
        (__ev_get_upper_ufix32_fs): Call __ev_get_ufix32_fs.
        (__ev_get_lower_ufix32_fs): Same.
        (__ev_get_upper_sfix32_fs): Call __ev_get_sfix32_fs.
        (__ev_get_lower_sfix32_fs): Same.
        (__ev_set_sfix32_fs_internal): New.
        (__ev_set_ufix32_fs_internal): New.
        (__ev_set_sfix32_fs): Call __ev_set_sfix32_fs_internal.
        (__ev_set_ufix32_fs): Call __ev_set_ufix32_fs_internal.
        (__ev_set_upper_sfix32_fs): Call function.
        (__ev_set_lower_sfix32_fs): Same.
        (__ev_set_upper_ufix32_fs): Same.
        (__ev_set_lower_ufix32_fs): Same.

From-SVN: r59498

gcc/ChangeLog
gcc/config/rs6000/spe.h

index 9c8ac7913d6fc27ea157dc08f2a9aa1f40634f4f..95683954718ff01791b8460d0bb80cc058cd4df6 100644 (file)
@@ -1,3 +1,25 @@
+2002-11-25  Aldy Hernandez  <aldyh@redhat.com>
+
+        * config/rs6000/spe.h (__ev_create_sfix32_fs): Change macro into
+        new function.
+        (__ev_create_ufix32_fs): Same.
+        (__ev_get_sfix32_fs_internal): New.
+        (__ev_get_sfix32_fs): Define to use function.
+        (__ev_get_ufix32_fs_internal): New.
+        (__ev_get_ufix32_fs): Define to use function.
+        (__ev_get_upper_ufix32_fs): Call __ev_get_ufix32_fs.
+        (__ev_get_lower_ufix32_fs): Same.
+        (__ev_get_upper_sfix32_fs): Call __ev_get_sfix32_fs.
+        (__ev_get_lower_sfix32_fs): Same.
+        (__ev_set_sfix32_fs_internal): New.
+        (__ev_set_ufix32_fs_internal): New.
+        (__ev_set_sfix32_fs): Call __ev_set_sfix32_fs_internal.
+        (__ev_set_ufix32_fs): Call __ev_set_ufix32_fs_internal.
+        (__ev_set_upper_sfix32_fs): Call function.
+        (__ev_set_lower_sfix32_fs): Same.
+        (__ev_set_upper_ufix32_fs): Same.
+        (__ev_set_lower_ufix32_fs): Same.
+
 2002-11-25  Douglas B Rupp  <rupp@gnat.com>
 
        * gcc.c (do_spec_1): Reset delete_this_arg to zero.
index 279806e71d6a89796c50b7d2296c49f6cb541d41..044e6883b43b87efbd3f8abc096e311615d2d320 100644 (file)
@@ -541,8 +541,6 @@ __internal_ev_mwhgumian (__ev64_opaque__ a, __ev64_opaque__ b)
 
 #define __ev_create_ufix32_u32 __ev_create_u32
 #define __ev_create_sfix32_s32 __ev_create_s32
-#define __ev_create_sfix32_fs __ev_create_fs
-#define __ev_create_ufix32_fs __ev_create_fs
 
 static inline __ev64_opaque__
 __ev_create_s16 (int16_t a, int16_t b, int16_t c, int16_t d)
@@ -624,6 +622,24 @@ __ev_create_fs (float a, float b)
   return u.v;
 }
 
+static inline __ev64_opaque__
+__ev_create_sfix32_fs (float a, float b)
+{
+  __ev64_opaque__ ev;
+
+  ev = (__ev64_opaque__) __ev_create_fs (a, b);
+  return (__ev64_opaque__) __builtin_spe_evfsctsf (ev);
+}
+
+static inline __ev64_opaque__
+__ev_create_ufix32_fs (float a, float b)
+{
+  __ev64_opaque__ ev;
+
+  ev = (__ev64_opaque__) __ev_create_fs (a, b);
+  return (__ev64_opaque__) __builtin_spe_evfsctuf (ev);
+}
+
 static inline __ev64_opaque__
 __ev_create_s64 (int64_t a)
 {
@@ -665,10 +681,10 @@ __ev_create_u64 (uint64_t a)
 #define __ev_get_lower_ufix32_u32(a) __ev_get_lower_u32(a)
 #define __ev_get_upper_sfix32_s32(a) __ev_get_upper_s32(a)
 #define __ev_get_lower_sfix32_s32(a) __ev_get_lower_s32(a)
-#define __ev_get_upper_sfix32_fs(a) __ev_get_upper_fs(a)
-#define __ev_get_lower_sfix32_fs(a) __ev_get_lower_fs(a)
-#define __ev_get_upper_ufix32_fs(a) __ev_get_upper_fs(a)
-#define __ev_get_lower_ufix32_fs(a) __ev_get_lower_fs(a)
+#define __ev_get_upper_sfix32_fs(a)  __ev_get_sfix32_fs (a, 0)
+#define __ev_get_lower_sfix32_fs(a)  __ev_get_sfix32_fs (a, 1)
+#define __ev_get_upper_ufix32_fs(a)  __ev_get_ufix32_fs (a, 0)
+#define __ev_get_lower_ufix32_fs(a)  __ev_get_ufix32_fs (a, 1)
 
 #define __ev_get_u32(a, b) __ev_get_u32_internal ((__ev64_opaque__) a, b)
 #define __ev_get_s32(a, b) __ev_get_s32_internal ((__ev64_opaque__) a, b)
@@ -678,8 +694,8 @@ __ev_create_u64 (uint64_t a)
 
 #define __ev_get_ufix32_u32(a, b) __ev_get_u32 (a, b)
 #define __ev_get_sfix32_s32(a, b) __ev_get_s32 (a, b)
-#define __ev_get_ufix32_fs(a, b) __ev_get_fs (a, b)
-#define __ev_get_sfix32_fs(a, b) __ev_get_fs (a, b)
+#define __ev_get_ufix32_fs(a, b)     __ev_get_ufix32_fs_internal ((__ev64_opaque__)(a), b)
+#define __ev_get_sfix32_fs(a, b)     __ev_get_sfix32_fs_internal ((__ev64_opaque__)(a), b)
 
 static inline uint32_t
 __ev_get_u32_internal (__ev64_opaque__ a, uint32_t pos)
@@ -720,6 +736,24 @@ __ev_get_fs_internal (__ev64_opaque__ a, uint32_t pos)
   return u.f[pos];
 }
 
+static inline float
+__ev_get_sfix32_fs_internal (__ev64_opaque__ a, uint32_t pos)
+{
+  __ev64_fs__ v;
+
+  v = __builtin_spe_evfscfsf (a);
+  return __ev_get_fs_internal (v, pos);
+}
+
+static inline float
+__ev_get_ufix32_fs_internal (__ev64_opaque__ a, uint32_t pos)
+{
+  __ev64_fs__ v;
+
+  v = __builtin_spe_evfscfuf (a);
+  return __ev_get_fs_internal (v, pos);
+}
+
 static inline uint16_t
 __ev_get_u16_internal (__ev64_opaque__ a, uint32_t pos)
 {
@@ -756,8 +790,9 @@ __ev_get_s16_internal (__ev64_opaque__ a, uint32_t pos)
 
 #define __ev_set_ufix32_u32 __ev_set_u32
 #define __ev_set_sfix32_s32 __ev_set_s32
-#define __ev_set_ufix32_fs __ev_set_fs
-#define __ev_set_sfix32_fs __ev_set_fs
+
+#define __ev_set_sfix32_fs(a, b, c)  __ev_set_sfix32_fs_internal ((__ev64_opaque__) (a), b, c)
+#define __ev_set_ufix32_fs(a, b, c)  __ev_set_ufix32_fs_internal ((__ev64_opaque__) (a), b, c)
 
 #define __ev_set_upper_u32(a, b) __ev_set_u32(a, b, 0)
 #define __ev_set_lower_u32(a, b) __ev_set_u32 (a, b, 1)
@@ -769,10 +804,10 @@ __ev_get_s16_internal (__ev64_opaque__ a, uint32_t pos)
 #define __ev_set_lower_ufix32_u32 __ev_set_lower_u32
 #define __ev_set_upper_sfix32_s32 __ev_set_upper_s32
 #define __ev_set_lower_sfix32_s32 __ev_set_lower_s32
-#define __ev_set_upper_sfix32_fs __ev_set_upper_fs
-#define __ev_set_lower_sfix32_fs __ev_set_lower_fs
-#define __ev_set_upper_ufix32_fs __ev_set_upper_fs
-#define __ev_set_lower_ufix32_fs __ev_set_lower_fs
+#define __ev_set_upper_sfix32_fs(a, b)  __ev_set_sfix32_fs (a, b, 0)
+#define __ev_set_lower_sfix32_fs(a, b)  __ev_set_sfix32_fs (a, b, 1)
+#define __ev_set_upper_ufix32_fs(a, b)  __ev_set_ufix32_fs (a, b, 0)
+#define __ev_set_lower_ufix32_fs(a, b)  __ev_set_ufix32_fs (a, b, 1)
 
 #define __ev_set_acc_vec64(a) __builtin_spe_evmra ((__ev64_opaque__)(a))
 
@@ -836,6 +871,38 @@ __ev_set_fs_internal (__ev64_opaque__ a, float b, uint32_t pos )
   return u.v;
 }
 
+static inline __ev64_opaque__
+__ev_set_sfix32_fs_internal (__ev64_opaque__ a, float b, uint32_t pos)
+{
+  __ev64_opaque__ v;
+  float other;
+
+  /* Get other half.  */
+  other = __ev_get_fs_internal (a, pos ^ 1);
+
+  /* Make an sfix32 with 'b'.  */
+  v = __ev_create_sfix32_fs (b, b);
+
+  /* Set other half to what it used to be.  */
+  return __ev_set_fs_internal (v, other, pos ^ 1);
+}
+
+static inline __ev64_opaque__
+__ev_set_ufix32_fs_internal (__ev64_opaque__ a, float b, uint32_t pos)
+{
+  __ev64_opaque__ v;
+  float other;
+
+  /* Get other half.  */
+  other = __ev_get_fs_internal (a, pos ^ 1);
+
+  /* Make an ufix32 with 'b'.  */
+  v = __ev_create_ufix32_fs (b, b);
+
+  /* Set other half to what it used to be.  */
+  return __ev_set_fs_internal (v, other, pos ^ 1);
+}
+
 static inline __ev64_opaque__
 __ev_set_u16_internal (__ev64_opaque__ a, uint16_t b, uint32_t pos )
 {