diff options
author | djm <> | 2010-10-01 22:54:21 +0000 |
---|---|---|
committer | djm <> | 2010-10-01 22:54:21 +0000 |
commit | 829fd51d4f8dde4a7f3bf54754f3c1d1a502f5e2 (patch) | |
tree | e03b9f1bd051e844b971936729e9df549a209130 /src/lib/libcrypto/sparccpuid.S | |
parent | e6b755d2a53d3cac7a344dfdd6bf7c951cac754c (diff) | |
download | openbsd-829fd51d4f8dde4a7f3bf54754f3c1d1a502f5e2.tar.gz openbsd-829fd51d4f8dde4a7f3bf54754f3c1d1a502f5e2.tar.bz2 openbsd-829fd51d4f8dde4a7f3bf54754f3c1d1a502f5e2.zip |
import OpenSSL-1.0.0a
Diffstat (limited to 'src/lib/libcrypto/sparccpuid.S')
-rw-r--r-- | src/lib/libcrypto/sparccpuid.S | 119 |
1 files changed, 100 insertions, 19 deletions
diff --git a/src/lib/libcrypto/sparccpuid.S b/src/lib/libcrypto/sparccpuid.S index c17350fc89..aa8b11efc9 100644 --- a/src/lib/libcrypto/sparccpuid.S +++ b/src/lib/libcrypto/sparccpuid.S | |||
@@ -34,7 +34,8 @@ OPENSSL_wipe_cpu: | |||
34 | nop | 34 | nop |
35 | call .PIC.zero.up | 35 | call .PIC.zero.up |
36 | mov .zero-(.-4),%o0 | 36 | mov .zero-(.-4),%o0 |
37 | ldd [%o0],%f0 | 37 | ld [%o0],%f0 |
38 | ld [%o0],%f1 | ||
38 | 39 | ||
39 | subcc %g0,1,%o0 | 40 | subcc %g0,1,%o0 |
40 | ! Following is V9 "rd %ccr,%o0" instruction. However! V8 | 41 | ! Following is V9 "rd %ccr,%o0" instruction. However! V8 |
@@ -166,6 +167,7 @@ walk_reg_wins: | |||
166 | 167 | ||
167 | .global OPENSSL_atomic_add | 168 | .global OPENSSL_atomic_add |
168 | .type OPENSSL_atomic_add,#function | 169 | .type OPENSSL_atomic_add,#function |
170 | .align 32 | ||
169 | OPENSSL_atomic_add: | 171 | OPENSSL_atomic_add: |
170 | #ifndef ABI64 | 172 | #ifndef ABI64 |
171 | subcc %g0,1,%o2 | 173 | subcc %g0,1,%o2 |
@@ -177,7 +179,7 @@ OPENSSL_atomic_add: | |||
177 | ba .enter | 179 | ba .enter |
178 | nop | 180 | nop |
179 | #ifdef __sun | 181 | #ifdef __sun |
180 | ! Note that you don't have to link with libthread to call thr_yield, | 182 | ! Note that you do not have to link with libthread to call thr_yield, |
181 | ! as libc provides a stub, which is overloaded the moment you link | 183 | ! as libc provides a stub, which is overloaded the moment you link |
182 | ! with *either* libpthread or libthread... | 184 | ! with *either* libpthread or libthread... |
183 | #define YIELD_CPU thr_yield | 185 | #define YIELD_CPU thr_yield |
@@ -213,27 +215,106 @@ OPENSSL_atomic_add: | |||
213 | sra %o0,%g0,%o0 ! we return signed int, remember? | 215 | sra %o0,%g0,%o0 ! we return signed int, remember? |
214 | .size OPENSSL_atomic_add,.-OPENSSL_atomic_add | 216 | .size OPENSSL_atomic_add,.-OPENSSL_atomic_add |
215 | 217 | ||
216 | .global OPENSSL_rdtsc | 218 | .global _sparcv9_rdtick |
219 | .align 32 | ||
220 | _sparcv9_rdtick: | ||
217 | subcc %g0,1,%o0 | 221 | subcc %g0,1,%o0 |
218 | .word 0x91408000 !rd %ccr,%o0 | 222 | .word 0x91408000 !rd %ccr,%o0 |
219 | cmp %o0,0x99 | 223 | cmp %o0,0x99 |
220 | bne .notsc | 224 | bne .notick |
221 | xor %o0,%o0,%o0 | 225 | xor %o0,%o0,%o0 |
222 | save %sp,FRAME-16,%sp | 226 | .word 0x91410000 !rd %tick,%o0 |
223 | mov 513,%o0 !SI_PLATFORM | 227 | retl |
224 | add %sp,BIAS+16,%o1 | 228 | .word 0x93323020 !srlx %o2,32,%o1 |
225 | call sysinfo | 229 | .notick: |
226 | mov 256,%o2 | 230 | retl |
231 | xor %o1,%o1,%o1 | ||
232 | .type _sparcv9_rdtick,#function | ||
233 | .size _sparcv9_rdtick,.-_sparcv9_rdtick | ||
227 | 234 | ||
228 | add %sp,BIAS-16,%o1 | 235 | .global OPENSSL_cleanse |
229 | ld [%o1],%l0 | 236 | .align 32 |
230 | ld [%o1+4],%l1 | 237 | OPENSSL_cleanse: |
231 | ld [%o1+8],%l2 | 238 | cmp %o1,14 |
232 | mov %lo('SUNW'),%l3 | 239 | nop |
233 | ret | 240 | #ifdef ABI64 |
234 | restore | 241 | bgu %xcc,.Lot |
235 | .notsc: | 242 | #else |
243 | bgu .Lot | ||
244 | #endif | ||
245 | cmp %o1,0 | ||
246 | bne .Little | ||
247 | nop | ||
248 | retl | ||
249 | nop | ||
250 | |||
251 | .Little: | ||
252 | stb %g0,[%o0] | ||
253 | subcc %o1,1,%o1 | ||
254 | bnz .Little | ||
255 | add %o0,1,%o0 | ||
256 | retl | ||
257 | nop | ||
258 | .align 32 | ||
259 | .Lot: | ||
260 | #ifndef ABI64 | ||
261 | subcc %g0,1,%g1 | ||
262 | ! see above for explanation | ||
263 | .word 0x83408000 !rd %ccr,%g1 | ||
264 | cmp %g1,0x99 | ||
265 | bne .v8lot | ||
266 | nop | ||
267 | #endif | ||
268 | |||
269 | .v9lot: andcc %o0,7,%g0 | ||
270 | bz .v9aligned | ||
271 | nop | ||
272 | stb %g0,[%o0] | ||
273 | sub %o1,1,%o1 | ||
274 | ba .v9lot | ||
275 | add %o0,1,%o0 | ||
276 | .align 16,0x01000000 | ||
277 | .v9aligned: | ||
278 | .word 0xc0720000 !stx %g0,[%o0] | ||
279 | sub %o1,8,%o1 | ||
280 | andcc %o1,-8,%g0 | ||
281 | #ifdef ABI64 | ||
282 | .word 0x126ffffd !bnz %xcc,.v9aligned | ||
283 | #else | ||
284 | .word 0x124ffffd !bnz %icc,.v9aligned | ||
285 | #endif | ||
286 | add %o0,8,%o0 | ||
287 | |||
288 | cmp %o1,0 | ||
289 | bne .Little | ||
290 | nop | ||
236 | retl | 291 | retl |
237 | nop | 292 | nop |
238 | .type OPENSSL_rdtsc,#function | 293 | #ifndef ABI64 |
239 | .size OPENSSL_rdtsc,.-OPENSSL_atomic_add | 294 | .v8lot: andcc %o0,3,%g0 |
295 | bz .v8aligned | ||
296 | nop | ||
297 | stb %g0,[%o0] | ||
298 | sub %o1,1,%o1 | ||
299 | ba .v8lot | ||
300 | add %o0,1,%o0 | ||
301 | nop | ||
302 | .v8aligned: | ||
303 | st %g0,[%o0] | ||
304 | sub %o1,4,%o1 | ||
305 | andcc %o1,-4,%g0 | ||
306 | bnz .v8aligned | ||
307 | add %o0,4,%o0 | ||
308 | |||
309 | cmp %o1,0 | ||
310 | bne .Little | ||
311 | nop | ||
312 | retl | ||
313 | nop | ||
314 | #endif | ||
315 | .type OPENSSL_cleanse,#function | ||
316 | .size OPENSSL_cleanse,.-OPENSSL_cleanse | ||
317 | |||
318 | .section ".init",#alloc,#execinstr | ||
319 | call OPENSSL_cpuid_setup | ||
320 | nop | ||