diff options
-rw-r--r-- | include/global.h | 12 | ||||
-rw-r--r-- | strings/strstr-sparc.s | 4 |
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 |