ppccpuid.pl 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #!/usr/bin/env perl
  2. $flavour = shift;
  3. $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
  4. ( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
  5. ( $xlate="${dir}perlasm/ppc-xlate.pl" and -f $xlate) or
  6. die "can't locate ppc-xlate.pl";
  7. open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
  8. if ($flavour=~/64/) {
  9. $CMPLI="cmpldi";
  10. $SHRLI="srdi";
  11. $SIGNX="extsw";
  12. } else {
  13. $CMPLI="cmplwi";
  14. $SHRLI="srwi";
  15. $SIGNX="mr";
  16. }
  17. $code=<<___;
  18. .machine "any"
  19. .text
  20. .globl .OPENSSL_ppc64_probe
  21. .align 4
  22. .OPENSSL_ppc64_probe:
  23. fcfid f1,f1
  24. extrdi r0,r0,32,0
  25. blr
  26. .long 0
  27. .byte 0,12,0x14,0,0,0,0,0
  28. .size .OPENSSL_ppc64_probe,.-.OPENSSL_ppc64_probe
  29. .globl .OPENSSL_altivec_probe
  30. .align 4
  31. .OPENSSL_altivec_probe:
  32. .long 0x10000484 # vor v0,v0,v0
  33. blr
  34. .long 0
  35. .byte 0,12,0x14,0,0,0,0,0
  36. .size .OPENSSL_altivec_probe,.-..OPENSSL_altivec_probe
  37. .globl .OPENSSL_crypto207_probe
  38. .align 4
  39. .OPENSSL_crypto207_probe:
  40. lvx_u v0,0,r1
  41. vcipher v0,v0,v0
  42. blr
  43. .long 0
  44. .byte 0,12,0x14,0,0,0,0,0
  45. .size .OPENSSL_crypto207_probe,.-.OPENSSL_crypto207_probe
  46. .globl .OPENSSL_wipe_cpu
  47. .align 4
  48. .OPENSSL_wipe_cpu:
  49. xor r0,r0,r0
  50. fmr f0,f31
  51. fmr f1,f31
  52. fmr f2,f31
  53. mr r3,r1
  54. fmr f3,f31
  55. xor r4,r4,r4
  56. fmr f4,f31
  57. xor r5,r5,r5
  58. fmr f5,f31
  59. xor r6,r6,r6
  60. fmr f6,f31
  61. xor r7,r7,r7
  62. fmr f7,f31
  63. xor r8,r8,r8
  64. fmr f8,f31
  65. xor r9,r9,r9
  66. fmr f9,f31
  67. xor r10,r10,r10
  68. fmr f10,f31
  69. xor r11,r11,r11
  70. fmr f11,f31
  71. xor r12,r12,r12
  72. fmr f12,f31
  73. fmr f13,f31
  74. blr
  75. .long 0
  76. .byte 0,12,0x14,0,0,0,0,0
  77. .size .OPENSSL_wipe_cpu,.-.OPENSSL_wipe_cpu
  78. .globl .OPENSSL_atomic_add
  79. .align 4
  80. .OPENSSL_atomic_add:
  81. Ladd: lwarx r5,0,r3
  82. add r0,r4,r5
  83. stwcx. r0,0,r3
  84. bne- Ladd
  85. $SIGNX r3,r0
  86. blr
  87. .long 0
  88. .byte 0,12,0x14,0,0,0,2,0
  89. .long 0
  90. .size .OPENSSL_atomic_add,.-.OPENSSL_atomic_add
  91. .globl .OPENSSL_rdtsc
  92. .align 4
  93. .OPENSSL_rdtsc:
  94. mftb r3
  95. mftbu r4
  96. blr
  97. .long 0
  98. .byte 0,12,0x14,0,0,0,0,0
  99. .size .OPENSSL_rdtsc,.-.OPENSSL_rdtsc
  100. .globl .OPENSSL_cleanse
  101. .align 4
  102. .OPENSSL_cleanse:
  103. $CMPLI r4,7
  104. li r0,0
  105. bge Lot
  106. $CMPLI r4,0
  107. beqlr-
  108. Little: mtctr r4
  109. stb r0,0(r3)
  110. addi r3,r3,1
  111. bdnz \$-8
  112. blr
  113. Lot: andi. r5,r3,3
  114. beq Laligned
  115. stb r0,0(r3)
  116. subi r4,r4,1
  117. addi r3,r3,1
  118. b Lot
  119. Laligned:
  120. $SHRLI r5,r4,2
  121. mtctr r5
  122. stw r0,0(r3)
  123. addi r3,r3,4
  124. bdnz \$-8
  125. andi. r4,r4,3
  126. bne Little
  127. blr
  128. .long 0
  129. .byte 0,12,0x14,0,0,0,2,0
  130. .long 0
  131. .size .OPENSSL_cleanse,.-.OPENSSL_cleanse
  132. ___
  133. $code =~ s/\`([^\`]*)\`/eval $1/gem;
  134. print $code;
  135. close STDOUT;