Advertisement
Guest User

genc.py

a guest
Jan 4th, 2022
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. import sympy
  2. import os
  3.  
  4. p = []
  5. m = []
  6. c = []
  7. M = sympy.sqrt(2**32)
  8. i = 3
  9. while i < M:
  10. if (sympy.isprime(i)):
  11. p.append(i)
  12. i += 2
  13. f = open("prime.c", "w")
  14. f.write("int main() {}\n")
  15. for i in range(len(p)):
  16. f.write("unsigned d" + str(p[i]) + "(unsigned a) {return !(a % " +
  17. str(p[i]) + ");}\n")
  18. f.close()
  19. os.system("gcc -S -masm=intel -O3 -oprime.s prime.c")
  20. f = open("prime.s", "r")
  21. s = f.read()
  22. f.close()
  23.  
  24. def h(d):
  25. d = int(d)
  26. if d < 0:
  27. return str(hex(d + (1 << 32)))
  28. else:
  29. return str(hex(d))
  30.  
  31. def g(s):
  32. for i in range(len(s)):
  33. if s[i] == '-':
  34. s = s[i:]
  35. break;
  36. if s[i].isdigit():
  37. s = s[i:]
  38. break;
  39. d = ""
  40. i = 0
  41. while i < len(s):
  42. if s[i] == '-' or s[i].isdigit():
  43. d += s[i]
  44. else:
  45. break
  46. i += 1
  47. return h(d), s[i:]
  48.  
  49. for i in range(len(p)):
  50. s = s[s.find("d" + str(p[i]) + ":"):]
  51. s = s[s.find("imul"):]
  52. n, s = g(s)
  53. m.append(n)
  54. n, s = g(s)
  55. c.append(n)
  56. f = open("prime.c", "w")
  57. f.write("unsigned prime(unsigned r1) {\n\tunsigned r4 = 0;\n" +
  58. "\tif (r1 < 2) goto F;\n\tif (r1 == 2) goto T;\n\tif (!(r1 & 1)) goto F;\n" +
  59. "\tif (r1 < 9) goto T;\n")
  60. l = 9
  61. for i in range(len(p)):
  62. if p[i] > l:
  63. l = p[i] * p[i]
  64. f.write("\tif (r1 < " + str(l) + ") goto T;\n")
  65. f.write("\tif (r1 * " + m[i] + " <= " + c[i] + ") goto F;\n")
  66. f.write("T:\n\tr4 = !r4;\nF:\n\treturn r4;\n}\n")
  67. f.close()
  68.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement