summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/sparccpuid.S
diff options
context:
space:
mode:
authordjm <>2010-10-01 22:54:21 +0000
committerdjm <>2010-10-01 22:54:21 +0000
commit829fd51d4f8dde4a7f3bf54754f3c1d1a502f5e2 (patch)
treee03b9f1bd051e844b971936729e9df549a209130 /src/lib/libcrypto/sparccpuid.S
parente6b755d2a53d3cac7a344dfdd6bf7c951cac754c (diff)
downloadopenbsd-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.S119
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
169OPENSSL_atomic_add: 171OPENSSL_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 237OPENSSL_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