bug81225_2.phpt 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. --TEST--
  2. Bug #81225: Wrong result with pow operator with JIT enabled
  3. --EXTENSIONS--
  4. opcache
  5. --INI--
  6. opcache.enable=1
  7. opcache.enable_cli=1
  8. opcache.jit_buffer_size=1M
  9. opcache.jit=function
  10. --SKIPIF--
  11. <?php if (PHP_INT_SIZE != 8) die("skip: 64-bit only"); ?>
  12. --FILE--
  13. <?php
  14. function add_with_positive(int $a) {
  15. $a = $a % 10;
  16. $b = $a + 1;
  17. $c = $a + 100;
  18. $d = $a + 2147483647; // 0x7fff,ffff
  19. $e = $a + 2147483648; // 0x8000,0000 cannot encoded as imm field of lea r1, [r2 + imm]
  20. $f = $a + 78187493394; // 0x12,1234,5678 cannot encoded as imm field of lea r1, [r2 + imm]
  21. var_dump($b, $c, $d, $e, $f);
  22. }
  23. function add_with_negative(int $a) {
  24. $a = $a % 10;
  25. $b = $a + (-1);
  26. $c = $a + (-100);
  27. $d = $a + (-2147483648); // 0xFFFF,FFFF,8000,0000
  28. $e = $a + (-2147483649); // 0xFFFF,FFFF,7FFF,FFFF cannot encoded as imm field of lea r1, [r2 + imm]
  29. $f = $a + (-261458978401740); // 0xFFFF,1234,5678,1234 cannot encoded as imm field of lea r1, [r2 + imm]
  30. var_dump($b, $c, $d, $e, $f);
  31. }
  32. function sub_with_positive(int $a) {
  33. $a = $a % 10;
  34. $b = $a - 1;
  35. $c = $a - 100;
  36. $d = $a - 2147483647; // 0x7fff,ffff
  37. $e = $a - 2147483648; // 0x8000,0000
  38. $f = $a - 2147483649; // 0x8000,0001 cannot encoded as imm field of lea r1, [r2 + imm]
  39. $g = $a - 78187493394; // 0x12,1234,5678 cannot encoded as imm field of lea r1, [r2 + imm]
  40. var_dump($b, $c, $d, $e, $f, $g);
  41. }
  42. function sub_with_negative(int $a) {
  43. $a = $a % 10;
  44. $b = $a - (-1);
  45. $c = $a - (-100);
  46. $d = $a - (-2147483647); // 0xFFFF,FFFF,8000,0001
  47. $e = $a - (-2147483648); // 0xFFFF,FFFF,8000,0000 cannot encoded as imm field of lea r1, [r2 + imm]
  48. $f = $a - (-2147483649); // 0xFFFF,FFFF,7FFF,FFFF cannot encoded as imm field of lea r1, [r2 + imm]
  49. $g = $a - (-261458978401740); // 0xFFFF,1234,5678,1234 cannot encoded as imm field of lea r1, [r2 + imm]
  50. var_dump($b, $c, $d, $e, $f, $g);
  51. }
  52. add_with_positive(2);
  53. add_with_negative(2);
  54. sub_with_positive(2);
  55. sub_with_negative(2);
  56. ?>
  57. --EXPECT--
  58. int(3)
  59. int(102)
  60. int(2147483649)
  61. int(2147483650)
  62. int(78187493396)
  63. int(1)
  64. int(-98)
  65. int(-2147483646)
  66. int(-2147483647)
  67. int(-261458978401738)
  68. int(1)
  69. int(-98)
  70. int(-2147483645)
  71. int(-2147483646)
  72. int(-2147483647)
  73. int(-78187493392)
  74. int(3)
  75. int(102)
  76. int(2147483649)
  77. int(2147483650)
  78. int(2147483651)
  79. int(261458978401742)