ppccpuid.pl 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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. .globl .OPENSSL_altivec_probe
  29. .align 4
  30. .OPENSSL_altivec_probe:
  31. .long 0x10000484 # vor v0,v0,v0
  32. blr
  33. .long 0
  34. .byte 0,12,0x14,0,0,0,0,0
  35. .globl .OPENSSL_wipe_cpu
  36. .align 4
  37. .OPENSSL_wipe_cpu:
  38. xor r0,r0,r0
  39. fmr f0,f31
  40. fmr f1,f31
  41. fmr f2,f31
  42. mr r3,r1
  43. fmr f3,f31
  44. xor r4,r4,r4
  45. fmr f4,f31
  46. xor r5,r5,r5
  47. fmr f5,f31
  48. xor r6,r6,r6
  49. fmr f6,f31
  50. xor r7,r7,r7
  51. fmr f7,f31
  52. xor r8,r8,r8
  53. fmr f8,f31
  54. xor r9,r9,r9
  55. fmr f9,f31
  56. xor r10,r10,r10
  57. fmr f10,f31
  58. xor r11,r11,r11
  59. fmr f11,f31
  60. xor r12,r12,r12
  61. fmr f12,f31
  62. fmr f13,f31
  63. blr
  64. .long 0
  65. .byte 0,12,0x14,0,0,0,0,0
  66. .globl .OPENSSL_atomic_add
  67. .align 4
  68. .OPENSSL_atomic_add:
  69. Ladd: lwarx r5,0,r3
  70. add r0,r4,r5
  71. stwcx. r0,0,r3
  72. bne- Ladd
  73. $SIGNX r3,r0
  74. blr
  75. .long 0
  76. .byte 0,12,0x14,0,0,0,2,0
  77. .long 0
  78. .globl .OPENSSL_rdtsc
  79. .align 4
  80. .OPENSSL_rdtsc:
  81. mftb r3
  82. mftbu r4
  83. blr
  84. .long 0
  85. .byte 0,12,0x14,0,0,0,0,0
  86. .globl .OPENSSL_cleanse
  87. .align 4
  88. .OPENSSL_cleanse:
  89. $CMPLI r4,7
  90. li r0,0
  91. bge Lot
  92. $CMPLI r4,0
  93. beqlr-
  94. Little: mtctr r4
  95. stb r0,0(r3)
  96. addi r3,r3,1
  97. bdnz \$-8
  98. blr
  99. Lot: andi. r5,r3,3
  100. beq Laligned
  101. stb r0,0(r3)
  102. subi r4,r4,1
  103. addi r3,r3,1
  104. b Lot
  105. Laligned:
  106. $SHRLI r5,r4,2
  107. mtctr r5
  108. stw r0,0(r3)
  109. addi r3,r3,4
  110. bdnz \$-8
  111. andi. r4,r4,3
  112. bne Little
  113. blr
  114. .long 0
  115. .byte 0,12,0x14,0,0,0,2,0
  116. .long 0
  117. ___
  118. $code =~ s/\`([^\`]*)\`/eval $1/gem;
  119. print $code;
  120. close STDOUT;