summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/global.h12
-rw-r--r--strings/strstr-sparc.s4
2 files changed, 10 insertions, 6 deletions
diff --git a/include/global.h b/include/global.h
index 0934f2931fd..006a0173c34 100644
--- a/include/global.h
+++ b/include/global.h
@@ -682,10 +682,14 @@ typedef char bool; /* Ordinary boolean values 0 1 */
*((T)+4)=(uchar) (((A) >> 32)); }
#define int8store(T,A) *((ulonglong *) (T))= (ulonglong) (A)
-#define doubleget(V,M) { *((long *) &V) = *((long*) M); \
- *(((long *) &V)+1) = *(((long*) M)+1); }
-#define doublestore(T,V) { *((long *) T) = *((long*) &V); \
- *(((long *) T)+1) = *(((long*) &V)+1); }
+typedef union {
+ double v;
+ long m[2];
+} doubleget_union;
+#define doubleget(V,M) { ((doubleget_union *)&V)->m[0] = *((long*) M); \
+ ((doubleget_union *)&V)->m[1] = *(((long*) M)+1); }
+#define doublestore(T,V) { *((long *) T) = ((doubleget_union *)&V)->m[0]; \
+ *(((long *) T)+1) = ((doubleget_union *)&V)->m[1]; }
#define float4get(V,M) { *((long *) &(V)) = *((long*) (M)); }
#define float8get(V,M) doubleget((V),(M))
#define float4store(V,M) memcpy((byte*) V,(byte*) (&M),sizeof(float))
diff --git a/strings/strstr-sparc.s b/strings/strstr-sparc.s
index d0d3659b1f8..141c3aa4209 100644
--- a/strings/strstr-sparc.s
+++ b/strings/strstr-sparc.s
@@ -31,12 +31,12 @@ strstr:
! if (*str++ == *search) {
! i=(char*) str; j=(char*) search+1;
- ldsb [%o1],%g6 ! g6= First char of search
+ ldsb [%o1],%o2 ! g6= First char of search
.top:
ldsb [%o0],%g3 ! g3= First char of rest of str
cmp %g3,0
be .abort ! Found end null ;
- cmp %g3,%g6
+ cmp %g3,%o2
bne .top
add %o0,1,%o0