It works only with the native "as" but not with "gas".
[EMAIL PROTECTED] wrote:
>
> ianh 02/02/19 15:45:06
>
> Modified: . configure.in
> atomic/solaris_sparc apr_atomic_sparc.s
> include apr_atomic.h
> test testatomic.c
> Log:
> enable sun-sparc specific code
>
> Revision Changes Path
> 1.409 +12 -0 apr/configure.in
>
> Index: configure.in
> ===================================================================
> RCS file: /home/cvs/apr/configure.in,v
> retrieving revision 1.408
> retrieving revision 1.409
> diff -u -r1.408 -r1.409
> --- configure.in 15 Feb 2002 22:36:40 -0000 1.408
> +++ configure.in 19 Feb 2002 23:45:06 -0000 1.409
> @@ -322,6 +322,18 @@
> enable_threads="no"
> eolstr="\\n"
> ;;
> + *sun*)
> + case $host_cpu in
> + *sparc*)
> + OSDIR="solaris_sparc"
> + eolstr="\\n"
> + ;;
> + *)
> + OSDIR="unix"
> + eolstr="\\n"
> + ;;
> + esac
> + ;;
> *)
> OSDIR="unix"
> eolstr="\\n"
>
>
>
> 1.3 +30 -7 apr/atomic/solaris_sparc/apr_atomic_sparc.s
>
> Index: apr_atomic_sparc.s
> ===================================================================
> RCS file: /home/cvs/apr/atomic/solaris_sparc/apr_atomic_sparc.s,v
> retrieving revision 1.2
> retrieving revision 1.3
> diff -u -r1.2 -r1.3
> --- apr_atomic_sparc.s 17 Feb 2002 20:17:53 -0000 1.2
> +++ apr_atomic_sparc.s 19 Feb 2002 23:45:06 -0000 1.3
> @@ -71,19 +71,20 @@
> !
> ENTRY(apr_atomic_add_sparc)
>
> - ld [%o0], %o2
> + ld [%o0], %o2 ! set o2 to current value
> _apr_atomic_add_sparc_loop:
> - add %o2, %o1, %o3
> - cas [%o0], %o2, %o3
> - cmp %o2, %o3
> - bne,a _apr_atomic_add_sparc_loop
> - ld [%o0], %o2
> + add %o2, %o1, %o3 ! o3 = o2 + o1
> + cas [%o0], %o2, %o3 ! if cur-val==o2 then cur-val=03
> + cmp %o2, %o3 ! see if the CAS worked
> + bne,a _apr_atomic_add_sparc_loop ! if not try again
> + ld [%o0], %o2 ! return the previous
> value
> retl
> mov %o3, %o0
>
> SET_SIZE(apr_atomic_add_sparc)
> !
> !
> +!
> ENTRY(apr_atomic_sub_sparc)
>
> ld [%o0], %o2
> @@ -96,5 +97,27 @@
> retl
> mov %o3, %o0
>
> - SET_SIZE(apr_atomic_sub_sparc)
> + SET_SIZE(apr_atomic_sub_sparc)
> +!
> +!
> +!
> +! %o0 [input] - the address of the value to compare
> +! %o1 [input] - the new value
> +! %o2 [input] - value to compare against
> +! %o0 [output] - the return value
> +!
> + ENTRY(apr_atomic_cas_sparc)
> + ENTRY(apr_atomic_casptr_sparc)
> +
> + cas [%o0], %o2, %o1
> + cmp %o1, %o2 ! if o1 == o2 values weren't swapped
> + bne,a _apr_atomic_cas_ne
> + mov %o2, %o0
> + retl
> + mov %o2, %o0
> +_apr_atomic_cas_ne:
> + retl
> + mov %o1, %o0
> +
> + SET_SIZE(apr_atomic_cas_sparc)
>
>
>
>
> 1.8 +1 -1 apr/include/apr_atomic.h
>
> Index: apr_atomic.h
> ===================================================================
> RCS file: /home/cvs/apr/include/apr_atomic.h,v
> retrieving revision 1.7
> retrieving revision 1.8
> diff -u -r1.7 -r1.8
> --- apr_atomic.h 19 Feb 2002 23:15:40 -0000 1.7
> +++ apr_atomic.h 19 Feb 2002 23:45:06 -0000 1.8
> @@ -173,7 +173,7 @@
>
> #define APR_ATOMIC_NEED_CAS_DEFAULT 1
>
> -#elif defined(__sparc__not_yet)
> +#elif defined(__sparc__)
> #define apr_atomic_t apr_uint32_t
> #define apr_atomic_read(p) *p
>
>
>
>
> 1.5 +0 -1 apr/test/testatomic.c
>
> Index: testatomic.c
> ===================================================================
> RCS file: /home/cvs/apr/test/testatomic.c,v
> retrieving revision 1.4
> retrieving revision 1.5
> diff -u -r1.4 -r1.5
> --- testatomic.c 19 Feb 2002 23:15:39 -0000 1.4
> +++ testatomic.c 19 Feb 2002 23:45:06 -0000 1.5
> @@ -83,7 +83,6 @@
> return APR_EGENERAL;
> }
> printf("OK\n");
> - printf("debug\n y=%d\n",y);
> printf("%-60s", "testing CAS - match non-null");
> oldval = apr_atomic_cas(&y,23,12);
> if (oldval != 12) {
>
>
>