usr/src/common/atomic/sparc/atomic.s
changeset 4292 d7beef35913b
parent 0 68f95e015346
child 6812 febeba71273d
equal deleted inserted replaced
4291:2650d270ece9 4292:d7beef35913b
     1 /*
     1 /*
     2  * CDDL HEADER START
     2  * CDDL HEADER START
     3  *
     3  *
     4  * The contents of this file are subject to the terms of the
     4  * The contents of this file are subject to the terms of the
     5  * Common Development and Distribution License, Version 1.0 only
     5  * Common Development and Distribution License (the "License").
     6  * (the "License").  You may not use this file except in compliance
     6  * You may not use this file except in compliance with the License.
     7  * with the License.
       
     8  *
     7  *
     9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    10  * or http://www.opensolaris.org/os/licensing.
     9  * or http://www.opensolaris.org/os/licensing.
    11  * See the License for the specific language governing permissions
    10  * See the License for the specific language governing permissions
    12  * and limitations under the License.
    11  * and limitations under the License.
    18  * information: Portions Copyright [yyyy] [name of copyright owner]
    17  * information: Portions Copyright [yyyy] [name of copyright owner]
    19  *
    18  *
    20  * CDDL HEADER END
    19  * CDDL HEADER END
    21  */
    20  */
    22 /*
    21 /*
    23  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
    22  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
    24  * Use is subject to license terms.
    23  * Use is subject to license terms.
    25  */
    24  */
    26 
    25 
    27 	.ident	"%Z%%M%	%I%	%E% SMI"
    26 	.ident	"%Z%%M%	%I%	%E% SMI"
    28 
    27 
    47 	 * Include the definitions for the libc weak aliases.
    46 	 * Include the definitions for the libc weak aliases.
    48 	 */
    47 	 */
    49 #include "../atomic_asm_weak.h"
    48 #include "../atomic_asm_weak.h"
    50 #endif
    49 #endif
    51 
    50 
       
    51 	/*
       
    52 	 * NOTE: If atomic_inc_8 and atomic_inc_8_nv are ever
       
    53 	 * separated, you need to also edit the libc sparc platform
       
    54 	 * specific mapfile and remove the NODYNSORT attribute
       
    55 	 * from atomic_inc_8_nv.
       
    56 	 */
    52 	ENTRY(atomic_inc_8)
    57 	ENTRY(atomic_inc_8)
    53 	ALTENTRY(atomic_inc_8_nv)
    58 	ALTENTRY(atomic_inc_8_nv)
    54 	ALTENTRY(atomic_inc_uchar)
    59 	ALTENTRY(atomic_inc_uchar)
    55 	ALTENTRY(atomic_inc_uchar_nv)
    60 	ALTENTRY(atomic_inc_uchar_nv)
    56 	ba	add_8
    61 	ba	add_8
    58 	SET_SIZE(atomic_inc_uchar_nv)
    63 	SET_SIZE(atomic_inc_uchar_nv)
    59 	SET_SIZE(atomic_inc_uchar)
    64 	SET_SIZE(atomic_inc_uchar)
    60 	SET_SIZE(atomic_inc_8_nv)
    65 	SET_SIZE(atomic_inc_8_nv)
    61 	SET_SIZE(atomic_inc_8)
    66 	SET_SIZE(atomic_inc_8)
    62 
    67 
       
    68 	/*
       
    69 	 * NOTE: If atomic_dec_8 and atomic_dec_8_nv are ever
       
    70 	 * separated, you need to also edit the libc sparc platform
       
    71 	 * specific mapfile and remove the NODYNSORT attribute
       
    72 	 * from atomic_dec_8_nv.
       
    73 	 */
    63 	ENTRY(atomic_dec_8)
    74 	ENTRY(atomic_dec_8)
    64 	ALTENTRY(atomic_dec_8_nv)
    75 	ALTENTRY(atomic_dec_8_nv)
    65 	ALTENTRY(atomic_dec_uchar)
    76 	ALTENTRY(atomic_dec_uchar)
    66 	ALTENTRY(atomic_dec_uchar_nv)
    77 	ALTENTRY(atomic_dec_uchar_nv)
    67 	ba	add_8
    78 	ba	add_8
    69 	SET_SIZE(atomic_dec_uchar_nv)
    80 	SET_SIZE(atomic_dec_uchar_nv)
    70 	SET_SIZE(atomic_dec_uchar)
    81 	SET_SIZE(atomic_dec_uchar)
    71 	SET_SIZE(atomic_dec_8_nv)
    82 	SET_SIZE(atomic_dec_8_nv)
    72 	SET_SIZE(atomic_dec_8)
    83 	SET_SIZE(atomic_dec_8)
    73 
    84 
       
    85 	/*
       
    86 	 * NOTE: If atomic_add_8 and atomic_add_8_nv are ever
       
    87 	 * separated, you need to also edit the libc sparc platform
       
    88 	 * specific mapfile and remove the NODYNSORT attribute
       
    89 	 * from atomic_add_8_nv.
       
    90 	 */
    74 	ENTRY(atomic_add_8)
    91 	ENTRY(atomic_add_8)
    75 	ALTENTRY(atomic_add_8_nv)
    92 	ALTENTRY(atomic_add_8_nv)
    76 	ALTENTRY(atomic_add_char)
    93 	ALTENTRY(atomic_add_char)
    77 	ALTENTRY(atomic_add_char_nv)
    94 	ALTENTRY(atomic_add_char_nv)
    78 add_8:
    95 add_8:
   101 	SET_SIZE(atomic_add_char_nv)
   118 	SET_SIZE(atomic_add_char_nv)
   102 	SET_SIZE(atomic_add_char)
   119 	SET_SIZE(atomic_add_char)
   103 	SET_SIZE(atomic_add_8_nv)
   120 	SET_SIZE(atomic_add_8_nv)
   104 	SET_SIZE(atomic_add_8)
   121 	SET_SIZE(atomic_add_8)
   105 
   122 
       
   123 	/*
       
   124 	 * NOTE: If atomic_inc_16 and atomic_inc_16_nv are ever
       
   125 	 * separated, you need to also edit the libc sparc platform
       
   126 	 * specific mapfile and remove the NODYNSORT attribute
       
   127 	 * from atomic_inc_16_nv.
       
   128 	 */
   106 	ENTRY(atomic_inc_16)
   129 	ENTRY(atomic_inc_16)
   107 	ALTENTRY(atomic_inc_16_nv)
   130 	ALTENTRY(atomic_inc_16_nv)
   108 	ALTENTRY(atomic_inc_ushort)
   131 	ALTENTRY(atomic_inc_ushort)
   109 	ALTENTRY(atomic_inc_ushort_nv)
   132 	ALTENTRY(atomic_inc_ushort_nv)
   110 	ba	add_16
   133 	ba	add_16
   112 	SET_SIZE(atomic_inc_ushort_nv)
   135 	SET_SIZE(atomic_inc_ushort_nv)
   113 	SET_SIZE(atomic_inc_ushort)
   136 	SET_SIZE(atomic_inc_ushort)
   114 	SET_SIZE(atomic_inc_16_nv)
   137 	SET_SIZE(atomic_inc_16_nv)
   115 	SET_SIZE(atomic_inc_16)
   138 	SET_SIZE(atomic_inc_16)
   116 
   139 
       
   140 	/*
       
   141 	 * NOTE: If atomic_dec_16 and atomic_dec_16_nv are ever
       
   142 	 * separated, you need to also edit the libc sparc platform
       
   143 	 * specific mapfile and remove the NODYNSORT attribute
       
   144 	 * from atomic_dec_16_nv.
       
   145 	 */
   117 	ENTRY(atomic_dec_16)
   146 	ENTRY(atomic_dec_16)
   118 	ALTENTRY(atomic_dec_16_nv)
   147 	ALTENTRY(atomic_dec_16_nv)
   119 	ALTENTRY(atomic_dec_ushort)
   148 	ALTENTRY(atomic_dec_ushort)
   120 	ALTENTRY(atomic_dec_ushort_nv)
   149 	ALTENTRY(atomic_dec_ushort_nv)
   121 	ba	add_16
   150 	ba	add_16
   123 	SET_SIZE(atomic_dec_ushort_nv)
   152 	SET_SIZE(atomic_dec_ushort_nv)
   124 	SET_SIZE(atomic_dec_ushort)
   153 	SET_SIZE(atomic_dec_ushort)
   125 	SET_SIZE(atomic_dec_16_nv)
   154 	SET_SIZE(atomic_dec_16_nv)
   126 	SET_SIZE(atomic_dec_16)
   155 	SET_SIZE(atomic_dec_16)
   127 
   156 
       
   157 	/*
       
   158 	 * NOTE: If atomic_add_16 and atomic_add_16_nv are ever
       
   159 	 * separated, you need to also edit the libc sparc platform
       
   160 	 * specific mapfile and remove the NODYNSORT attribute
       
   161 	 * from atomic_add_16_nv.
       
   162 	 */
   128 	ENTRY(atomic_add_16)
   163 	ENTRY(atomic_add_16)
   129 	ALTENTRY(atomic_add_16_nv)
   164 	ALTENTRY(atomic_add_16_nv)
   130 	ALTENTRY(atomic_add_short)
   165 	ALTENTRY(atomic_add_short)
   131 	ALTENTRY(atomic_add_short_nv)
   166 	ALTENTRY(atomic_add_short_nv)
   132 add_16:
   167 add_16:
   157 	SET_SIZE(atomic_add_short_nv)
   192 	SET_SIZE(atomic_add_short_nv)
   158 	SET_SIZE(atomic_add_short)
   193 	SET_SIZE(atomic_add_short)
   159 	SET_SIZE(atomic_add_16_nv)
   194 	SET_SIZE(atomic_add_16_nv)
   160 	SET_SIZE(atomic_add_16)
   195 	SET_SIZE(atomic_add_16)
   161 
   196 
       
   197 	/*
       
   198 	 * NOTE: If atomic_inc_32 and atomic_inc_32_nv are ever
       
   199 	 * separated, you need to also edit the libc sparc platform
       
   200 	 * specific mapfile and remove the NODYNSORT attribute
       
   201 	 * from atomic_inc_32_nv.
       
   202 	 */
   162 	ENTRY(atomic_inc_32)
   203 	ENTRY(atomic_inc_32)
   163 	ALTENTRY(atomic_inc_32_nv)
   204 	ALTENTRY(atomic_inc_32_nv)
   164 	ALTENTRY(atomic_inc_uint)
   205 	ALTENTRY(atomic_inc_uint)
   165 	ALTENTRY(atomic_inc_uint_nv)
   206 	ALTENTRY(atomic_inc_uint_nv)
   166 	ALTENTRY(atomic_inc_ulong)
   207 	ALTENTRY(atomic_inc_ulong)
   172 	SET_SIZE(atomic_inc_uint_nv)
   213 	SET_SIZE(atomic_inc_uint_nv)
   173 	SET_SIZE(atomic_inc_uint)
   214 	SET_SIZE(atomic_inc_uint)
   174 	SET_SIZE(atomic_inc_32_nv)
   215 	SET_SIZE(atomic_inc_32_nv)
   175 	SET_SIZE(atomic_inc_32)
   216 	SET_SIZE(atomic_inc_32)
   176 
   217 
       
   218 	/*
       
   219 	 * NOTE: If atomic_dec_32 and atomic_dec_32_nv are ever
       
   220 	 * separated, you need to also edit the libc sparc platform
       
   221 	 * specific mapfile and remove the NODYNSORT attribute
       
   222 	 * from atomic_dec_32_nv.
       
   223 	 */
   177 	ENTRY(atomic_dec_32)
   224 	ENTRY(atomic_dec_32)
   178 	ALTENTRY(atomic_dec_32_nv)
   225 	ALTENTRY(atomic_dec_32_nv)
   179 	ALTENTRY(atomic_dec_uint)
   226 	ALTENTRY(atomic_dec_uint)
   180 	ALTENTRY(atomic_dec_uint_nv)
   227 	ALTENTRY(atomic_dec_uint_nv)
   181 	ALTENTRY(atomic_dec_ulong)
   228 	ALTENTRY(atomic_dec_ulong)
   187 	SET_SIZE(atomic_dec_uint_nv)
   234 	SET_SIZE(atomic_dec_uint_nv)
   188 	SET_SIZE(atomic_dec_uint)
   235 	SET_SIZE(atomic_dec_uint)
   189 	SET_SIZE(atomic_dec_32_nv)
   236 	SET_SIZE(atomic_dec_32_nv)
   190 	SET_SIZE(atomic_dec_32)
   237 	SET_SIZE(atomic_dec_32)
   191 
   238 
       
   239 	/*
       
   240 	 * NOTE: If atomic_add_32 and atomic_add_32_nv are ever
       
   241 	 * separated, you need to also edit the libc sparc platform
       
   242 	 * specific mapfile and remove the NODYNSORT attribute
       
   243 	 * from atomic_add_32_nv.
       
   244 	 */
   192 	ENTRY(atomic_add_32)
   245 	ENTRY(atomic_add_32)
   193 	ALTENTRY(atomic_add_32_nv)
   246 	ALTENTRY(atomic_add_32_nv)
   194 	ALTENTRY(atomic_add_int)
   247 	ALTENTRY(atomic_add_int)
   195 	ALTENTRY(atomic_add_int_nv)
   248 	ALTENTRY(atomic_add_int_nv)
   196 	ALTENTRY(atomic_add_ptr)
   249 	ALTENTRY(atomic_add_ptr)
   214 	SET_SIZE(atomic_add_int_nv)
   267 	SET_SIZE(atomic_add_int_nv)
   215 	SET_SIZE(atomic_add_int)
   268 	SET_SIZE(atomic_add_int)
   216 	SET_SIZE(atomic_add_32_nv)
   269 	SET_SIZE(atomic_add_32_nv)
   217 	SET_SIZE(atomic_add_32)
   270 	SET_SIZE(atomic_add_32)
   218 
   271 
       
   272 	/*
       
   273 	 * NOTE: If atomic_inc_64 and atomic_inc_64_nv are ever
       
   274 	 * separated, you need to also edit the libc sparc platform
       
   275 	 * specific mapfile and remove the NODYNSORT attribute
       
   276 	 * from atomic_inc_64_nv.
       
   277 	 */
   219 	ENTRY(atomic_inc_64)
   278 	ENTRY(atomic_inc_64)
   220 	ALTENTRY(atomic_inc_64_nv)
   279 	ALTENTRY(atomic_inc_64_nv)
   221 	ba	add_64
   280 	ba	add_64
   222 	  add	%g0, 1, %o1
   281 	  add	%g0, 1, %o1
   223 	SET_SIZE(atomic_inc_64_nv)
   282 	SET_SIZE(atomic_inc_64_nv)
   224 	SET_SIZE(atomic_inc_64)
   283 	SET_SIZE(atomic_inc_64)
   225 
   284 
       
   285 	/*
       
   286 	 * NOTE: If atomic_dec_64 and atomic_dec_64_nv are ever
       
   287 	 * separated, you need to also edit the libc sparc platform
       
   288 	 * specific mapfile and remove the NODYNSORT attribute
       
   289 	 * from atomic_dec_64_nv.
       
   290 	 */
   226 	ENTRY(atomic_dec_64)
   291 	ENTRY(atomic_dec_64)
   227 	ALTENTRY(atomic_dec_64_nv)
   292 	ALTENTRY(atomic_dec_64_nv)
   228 	ba	add_64
   293 	ba	add_64
   229 	  sub	%g0, 1, %o1
   294 	  sub	%g0, 1, %o1
   230 	SET_SIZE(atomic_dec_64_nv)
   295 	SET_SIZE(atomic_dec_64_nv)
   231 	SET_SIZE(atomic_dec_64)
   296 	SET_SIZE(atomic_dec_64)
   232 
   297 
       
   298 	/*
       
   299 	 * NOTE: If atomic_add_64 and atomic_add_64_nv are ever
       
   300 	 * separated, you need to also edit the libc sparc platform
       
   301 	 * specific mapfile and remove the NODYNSORT attribute
       
   302 	 * from atomic_add_64_nv.
       
   303 	 */
   233 	ENTRY(atomic_add_64)
   304 	ENTRY(atomic_add_64)
   234 	ALTENTRY(atomic_add_64_nv)
   305 	ALTENTRY(atomic_add_64_nv)
   235 	sllx	%o1, 32, %o1		! upper 32 in %o1, lower in %o2
   306 	sllx	%o1, 32, %o1		! upper 32 in %o1, lower in %o2
   236 	srl	%o2, 0, %o2
   307 	srl	%o2, 0, %o2
   237 	add	%o1, %o2, %o1		! convert 2 32-bit args into 1 64-bit
   308 	add	%o1, %o2, %o1		! convert 2 32-bit args into 1 64-bit
   247 	retl
   318 	retl
   248 	srlx	%o1, 32, %o0		! return upper 32-bits in %o0
   319 	srlx	%o1, 32, %o0		! return upper 32-bits in %o0
   249 	SET_SIZE(atomic_add_64_nv)
   320 	SET_SIZE(atomic_add_64_nv)
   250 	SET_SIZE(atomic_add_64)
   321 	SET_SIZE(atomic_add_64)
   251 
   322 
       
   323 	/*
       
   324 	 * NOTE: If atomic_or_8 and atomic_or_8_nv are ever
       
   325 	 * separated, you need to also edit the libc sparc platform
       
   326 	 * specific mapfile and remove the NODYNSORT attribute
       
   327 	 * from atomic_or_8_nv.
       
   328 	 */
   252 	ENTRY(atomic_or_8)
   329 	ENTRY(atomic_or_8)
   253 	ALTENTRY(atomic_or_8_nv)
   330 	ALTENTRY(atomic_or_8_nv)
   254 	ALTENTRY(atomic_or_uchar)
   331 	ALTENTRY(atomic_or_uchar)
   255 	ALTENTRY(atomic_or_uchar_nv)
   332 	ALTENTRY(atomic_or_uchar_nv)
   256 	and	%o0, 0x3, %o4		! %o4 = byte offset, left-to-right
   333 	and	%o0, 0x3, %o4		! %o4 = byte offset, left-to-right
   275 	SET_SIZE(atomic_or_uchar_nv)
   352 	SET_SIZE(atomic_or_uchar_nv)
   276 	SET_SIZE(atomic_or_uchar)
   353 	SET_SIZE(atomic_or_uchar)
   277 	SET_SIZE(atomic_or_8_nv)
   354 	SET_SIZE(atomic_or_8_nv)
   278 	SET_SIZE(atomic_or_8)
   355 	SET_SIZE(atomic_or_8)
   279 
   356 
       
   357 	/*
       
   358 	 * NOTE: If atomic_or_16 and atomic_or_16_nv are ever
       
   359 	 * separated, you need to also edit the libc sparc platform
       
   360 	 * specific mapfile and remove the NODYNSORT attribute
       
   361 	 * from atomic_or_16_nv.
       
   362 	 */
   280 	ENTRY(atomic_or_16)
   363 	ENTRY(atomic_or_16)
   281 	ALTENTRY(atomic_or_16_nv)
   364 	ALTENTRY(atomic_or_16_nv)
   282 	ALTENTRY(atomic_or_ushort)
   365 	ALTENTRY(atomic_or_ushort)
   283 	ALTENTRY(atomic_or_ushort_nv)
   366 	ALTENTRY(atomic_or_ushort_nv)
   284 	and	%o0, 0x2, %o4		! %o4 = byte offset, left-to-right
   367 	and	%o0, 0x2, %o4		! %o4 = byte offset, left-to-right
   305 	SET_SIZE(atomic_or_ushort_nv)
   388 	SET_SIZE(atomic_or_ushort_nv)
   306 	SET_SIZE(atomic_or_ushort)
   389 	SET_SIZE(atomic_or_ushort)
   307 	SET_SIZE(atomic_or_16_nv)
   390 	SET_SIZE(atomic_or_16_nv)
   308 	SET_SIZE(atomic_or_16)
   391 	SET_SIZE(atomic_or_16)
   309 
   392 
       
   393 	/*
       
   394 	 * NOTE: If atomic_or_32 and atomic_or_32_nv are ever
       
   395 	 * separated, you need to also edit the libc sparc platform
       
   396 	 * specific mapfile and remove the NODYNSORT attribute
       
   397 	 * from atomic_or_32_nv.
       
   398 	 */
   310 	ENTRY(atomic_or_32)
   399 	ENTRY(atomic_or_32)
   311 	ALTENTRY(atomic_or_32_nv)
   400 	ALTENTRY(atomic_or_32_nv)
   312 	ALTENTRY(atomic_or_uint)
   401 	ALTENTRY(atomic_or_uint)
   313 	ALTENTRY(atomic_or_uint_nv)
   402 	ALTENTRY(atomic_or_uint_nv)
   314 	ALTENTRY(atomic_or_ulong)
   403 	ALTENTRY(atomic_or_ulong)
   327 	SET_SIZE(atomic_or_uint_nv)
   416 	SET_SIZE(atomic_or_uint_nv)
   328 	SET_SIZE(atomic_or_uint)
   417 	SET_SIZE(atomic_or_uint)
   329 	SET_SIZE(atomic_or_32_nv)
   418 	SET_SIZE(atomic_or_32_nv)
   330 	SET_SIZE(atomic_or_32)
   419 	SET_SIZE(atomic_or_32)
   331 
   420 
       
   421 	/*
       
   422 	 * NOTE: If atomic_or_64 and atomic_or_64_nv are ever
       
   423 	 * separated, you need to also edit the libc sparc platform
       
   424 	 * specific mapfile and remove the NODYNSORT attribute
       
   425 	 * from atomic_or_64_nv.
       
   426 	 */
   332 	ENTRY(atomic_or_64)
   427 	ENTRY(atomic_or_64)
   333 	ALTENTRY(atomic_or_64_nv)
   428 	ALTENTRY(atomic_or_64_nv)
   334 	sllx	%o1, 32, %o1		! upper 32 in %o1, lower in %o2
   429 	sllx	%o1, 32, %o1		! upper 32 in %o1, lower in %o2
   335 	srl	%o2, 0, %o2
   430 	srl	%o2, 0, %o2
   336 	add	%o1, %o2, %o1		! convert 2 32-bit args into 1 64-bit
   431 	add	%o1, %o2, %o1		! convert 2 32-bit args into 1 64-bit
   345 	retl
   440 	retl
   346 	srlx	%o1, 32, %o0		! return upper 32-bits in %o0
   441 	srlx	%o1, 32, %o0		! return upper 32-bits in %o0
   347 	SET_SIZE(atomic_or_64_nv)
   442 	SET_SIZE(atomic_or_64_nv)
   348 	SET_SIZE(atomic_or_64)
   443 	SET_SIZE(atomic_or_64)
   349 
   444 
       
   445 	/*
       
   446 	 * NOTE: If atomic_and_8 and atomic_and_8_nv are ever
       
   447 	 * separated, you need to also edit the libc sparc platform
       
   448 	 * specific mapfile and remove the NODYNSORT attribute
       
   449 	 * from atomic_and_8_nv.
       
   450 	 */
   350 	ENTRY(atomic_and_8)
   451 	ENTRY(atomic_and_8)
   351 	ALTENTRY(atomic_and_8_nv)
   452 	ALTENTRY(atomic_and_8_nv)
   352 	ALTENTRY(atomic_and_uchar)
   453 	ALTENTRY(atomic_and_uchar)
   353 	ALTENTRY(atomic_and_uchar_nv)
   454 	ALTENTRY(atomic_and_uchar_nv)
   354 	and	%o0, 0x3, %o4		! %o4 = byte offset, left-to-right
   455 	and	%o0, 0x3, %o4		! %o4 = byte offset, left-to-right
   373 	SET_SIZE(atomic_and_uchar_nv)
   474 	SET_SIZE(atomic_and_uchar_nv)
   374 	SET_SIZE(atomic_and_uchar)
   475 	SET_SIZE(atomic_and_uchar)
   375 	SET_SIZE(atomic_and_8_nv)
   476 	SET_SIZE(atomic_and_8_nv)
   376 	SET_SIZE(atomic_and_8)
   477 	SET_SIZE(atomic_and_8)
   377 
   478 
       
   479 	/*
       
   480 	 * NOTE: If atomic_and_16 and atomic_and_16_nv are ever
       
   481 	 * separated, you need to also edit the libc sparc platform
       
   482 	 * specific mapfile and remove the NODYNSORT attribute
       
   483 	 * from atomic_and_16_nv.
       
   484 	 */
   378 	ENTRY(atomic_and_16)
   485 	ENTRY(atomic_and_16)
   379 	ALTENTRY(atomic_and_16_nv)
   486 	ALTENTRY(atomic_and_16_nv)
   380 	ALTENTRY(atomic_and_ushort)
   487 	ALTENTRY(atomic_and_ushort)
   381 	ALTENTRY(atomic_and_ushort_nv)
   488 	ALTENTRY(atomic_and_ushort_nv)
   382 	and	%o0, 0x2, %o4		! %o4 = byte offset, left-to-right
   489 	and	%o0, 0x2, %o4		! %o4 = byte offset, left-to-right
   403 	SET_SIZE(atomic_and_ushort_nv)
   510 	SET_SIZE(atomic_and_ushort_nv)
   404 	SET_SIZE(atomic_and_ushort)
   511 	SET_SIZE(atomic_and_ushort)
   405 	SET_SIZE(atomic_and_16_nv)
   512 	SET_SIZE(atomic_and_16_nv)
   406 	SET_SIZE(atomic_and_16)
   513 	SET_SIZE(atomic_and_16)
   407 
   514 
       
   515 	/*
       
   516 	 * NOTE: If atomic_and_32 and atomic_and_32_nv are ever
       
   517 	 * separated, you need to also edit the libc sparc platform
       
   518 	 * specific mapfile and remove the NODYNSORT attribute
       
   519 	 * from atomic_and_32_nv.
       
   520 	 */
   408 	ENTRY(atomic_and_32)
   521 	ENTRY(atomic_and_32)
   409 	ALTENTRY(atomic_and_32_nv)
   522 	ALTENTRY(atomic_and_32_nv)
   410 	ALTENTRY(atomic_and_uint)
   523 	ALTENTRY(atomic_and_uint)
   411 	ALTENTRY(atomic_and_uint_nv)
   524 	ALTENTRY(atomic_and_uint_nv)
   412 	ALTENTRY(atomic_and_ulong)
   525 	ALTENTRY(atomic_and_ulong)
   425 	SET_SIZE(atomic_and_uint_nv)
   538 	SET_SIZE(atomic_and_uint_nv)
   426 	SET_SIZE(atomic_and_uint)
   539 	SET_SIZE(atomic_and_uint)
   427 	SET_SIZE(atomic_and_32_nv)
   540 	SET_SIZE(atomic_and_32_nv)
   428 	SET_SIZE(atomic_and_32)
   541 	SET_SIZE(atomic_and_32)
   429 
   542 
       
   543 	/*
       
   544 	 * NOTE: If atomic_and_64 and atomic_and_64_nv are ever
       
   545 	 * separated, you need to also edit the libc sparc platform
       
   546 	 * specific mapfile and remove the NODYNSORT attribute
       
   547 	 * from atomic_and_64_nv.
       
   548 	 */
   430 	ENTRY(atomic_and_64)
   549 	ENTRY(atomic_and_64)
   431 	ALTENTRY(atomic_and_64_nv)
   550 	ALTENTRY(atomic_and_64_nv)
   432 	sllx	%o1, 32, %o1		! upper 32 in %o1, lower in %o2
   551 	sllx	%o1, 32, %o1		! upper 32 in %o1, lower in %o2
   433 	srl	%o2, 0, %o2
   552 	srl	%o2, 0, %o2
   434 	add	%o1, %o2, %o1		! convert 2 32-bit args into 1 64-bit
   553 	add	%o1, %o2, %o1		! convert 2 32-bit args into 1 64-bit