tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

dce-with-rinstructions.js (81008B)


      1 // |jit-test| --ion-limit-script-size=off
      2 
      3 setJitCompilerOption("baseline.warmup.trigger", 9);
      4 setJitCompilerOption("ion.warmup.trigger", 20);
      5 var i;
      6 
      7 var warp = true;
      8 
      9 // Prevent GC from cancelling/discarding Ion compilations.
     10 gczeal(0);
     11 
     12 var max = 200;
     13 
     14 // Check that we are able to remove the operation inside recover test functions (denoted by "rop..."),
     15 // when we inline the first version of uceFault, and ensure that the bailout is correct
     16 // when uceFault is replaced (which cause an invalidation bailout)
     17 
     18 var uceFault = function (i) {
     19    if (i > 98)
     20        uceFault = function (i) { return true; };
     21    return false;
     22 }
     23 
     24 var uceFault_bitnot_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitnot_number'));
     25 function rbitnot_number(i) {
     26    var x = ~i;
     27    if (uceFault_bitnot_number(i) || uceFault_bitnot_number(i))
     28        assertEq(x, -100  /* = ~99 */);
     29    assertRecoveredOnBailout(x, true);
     30    return i;
     31 }
     32 
     33 var uceFault_bitnot_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitnot_object'));
     34 function rbitnot_object(i) {
     35    var t = i;
     36    var o = { valueOf: function () { return t; } };
     37    var x = ~o; /* computed with t == i, not 1000 */
     38    t = 1000;
     39    if (uceFault_bitnot_object(i) || uceFault_bitnot_object(i))
     40        assertEq(x, -100  /* = ~99 */);
     41    assertRecoveredOnBailout(x, false);
     42    return i;
     43 }
     44 
     45 var uceFault_bitand_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitand_number'));
     46 function rbitand_number(i) {
     47    var x = 1 & i;
     48    if (uceFault_bitand_number(i) || uceFault_bitand_number(i))
     49        assertEq(x, 1  /* = 1 & 99 */);
     50    assertRecoveredOnBailout(x, true);
     51    return i;
     52 }
     53 
     54 var uceFault_bitand_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitand_object'));
     55 function rbitand_object(i) {
     56    var t = i;
     57    var o = { valueOf: function () { return t; } };
     58    var x = o & i; /* computed with t == i, not 1000 */
     59    t = 1000;
     60    if (uceFault_bitand_object(i) || uceFault_bitand_object(i))
     61        assertEq(x, 99);
     62    assertRecoveredOnBailout(x, false);
     63    return i;
     64 }
     65 
     66 var uceFault_bitor_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitor_number'));
     67 function rbitor_number(i) {
     68    var x = i | -100; /* -100 == ~99 */
     69    if (uceFault_bitor_number(i) || uceFault_bitor_number(i))
     70        assertEq(x, -1) /* ~99 | 99 = -1 */
     71    assertRecoveredOnBailout(x, true);
     72    return i;
     73 }
     74 
     75 var uceFault_bitor_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitor_object'));
     76 function rbitor_object(i) {
     77    var t = i;
     78    var o = { valueOf: function() { return t; } };
     79    var x = o | -100;
     80    t = 1000;
     81    if (uceFault_bitor_object(i) || uceFault_bitor_object(i))
     82        assertEq(x, -1);
     83    assertRecoveredOnBailout(x, false);
     84    return i;
     85 }
     86 
     87 var uceFault_bitxor_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitxor_number'));
     88 function rbitxor_number(i) {
     89    var x = 1 ^ i;
     90    if (uceFault_bitxor_number(i) || uceFault_bitxor_number(i))
     91        assertEq(x, 98  /* = 1 XOR 99 */);
     92    assertRecoveredOnBailout(x, true);
     93    return i;
     94 }
     95 
     96 var uceFault_bitxor_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitxor_object'));
     97 function rbitxor_object(i) {
     98    var t = i;
     99    var o = { valueOf: function () { return t; } };
    100    var x = 1 ^ o; /* computed with t == i, not 1000 */
    101    t = 1000;
    102    if (uceFault_bitxor_object(i) || uceFault_bitxor_object(i))
    103        assertEq(x, 98  /* = 1 XOR 99 */);
    104    assertRecoveredOnBailout(x, false);
    105    return i;
    106 }
    107 
    108 var uceFault_lsh_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_lsh_number'));
    109 function rlsh_number(i) {
    110    var x = i << 1;
    111    if (uceFault_lsh_number(i) || uceFault_lsh_number(i))
    112        assertEq(x, 198); /* 99 << 1 == 198 */
    113    assertRecoveredOnBailout(x, true);
    114    return i;
    115 }
    116 
    117 var uceFault_lsh_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_lsh_object'));
    118 function rlsh_object(i) {
    119    var t = i;
    120    var o = { valueOf: function() { return t; } };
    121    var x = o << 1;
    122    t = 1000;
    123    if (uceFault_lsh_object(i) || uceFault_lsh_object(i))
    124        assertEq(x, 198);
    125    assertRecoveredOnBailout(x, false);
    126    return i;
    127 }
    128 
    129 var uceFault_rsh_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_rsh_number'));
    130 function rrsh_number(i) {
    131    var x = i >> 1;
    132    if (uceFault_rsh_number(i) || uceFault_rsh_number(i))
    133        assertEq(x, 49  /* = 99 >> 1 */);
    134    assertRecoveredOnBailout(x, true);
    135    return i;
    136 }
    137 
    138 var uceFault_rsh_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_rsh_object'));
    139 function rrsh_object(i) {
    140    var t = i;
    141    var o = { valueOf: function () { return t; } };
    142    var x = o >> 1; /* computed with t == i, not 1000 */
    143    t = 1000;
    144    if (uceFault_rsh_object(i) || uceFault_rsh_object(i))
    145        assertEq(x, 49  /* = 99 >> 1 */);
    146    assertRecoveredOnBailout(x, false);
    147    return i;
    148 }
    149 
    150 var uceFault_ursh_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_ursh_number'));
    151 function rursh_number(i) {
    152    var x = i >>> 1;
    153    if (uceFault_ursh_number(i) || uceFault_ursh_number(i))
    154        assertEq(x, 49  /* = 99 >>> 1 */);
    155    assertRecoveredOnBailout(x, true);
    156    return i;
    157 }
    158 
    159 var uceFault_ursh_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_ursh_object'));
    160 function rursh_object(i) {
    161    var t = i;
    162    var o = { valueOf: function () { return t; } };
    163    var x = o >>> 1; /* computed with t == i, not 1000 */
    164    t = 1000;
    165    if (uceFault_ursh_object(i) || uceFault_ursh_object(i))
    166        assertEq(x, 49  /* = 99 >>> 1 */);
    167    assertRecoveredOnBailout(x, false);
    168    return i;
    169 }
    170 
    171 var uceFault_signextend8_1 = eval(`(${uceFault})`.replace('uceFault', 'uceFault_signextend8_1'));
    172 function rsignextend8_1(i) {
    173    var x = (i << 24) >> 24;
    174    if (uceFault_signextend8_1(i) || uceFault_signextend8_1(i))
    175        assertEq(x, 99  /* = (99 << 24) >> 24 */);
    176    assertRecoveredOnBailout(x, true);
    177    return i;
    178 }
    179 
    180 var uceFault_signextend8_2 = eval(`(${uceFault})`.replace('uceFault', 'uceFault_signextend8_2'));
    181 function rsignextend8_2(i) {
    182    var x = ((-1 * i) << 24) >> 24;
    183    if (uceFault_signextend8_2(i) || uceFault_signextend8_2(i))
    184        assertEq(x, -99  /* = (-99 << 24) >> 24 */);
    185    assertRecoveredOnBailout(x, true);
    186    return i;
    187 }
    188 
    189 var uceFault_signextend16_1 = eval(`(${uceFault})`.replace('uceFault', 'uceFault_signextend16_1'));
    190 function rsignextend16_1(i) {
    191    var x = (i << 16) >> 16;
    192    if (uceFault_signextend16_1(i) || uceFault_signextend16_1(i))
    193        assertEq(x, 99  /* = (99 << 16) >> 16 */);
    194    assertRecoveredOnBailout(x, true);
    195    return i;
    196 }
    197 
    198 var uceFault_signextend16_2 = eval(`(${uceFault})`.replace('uceFault', 'uceFault_signextend16_2'));
    199 function rsignextend16_2(i) {
    200    var x = ((-1 * i) << 16) >> 16;
    201    if (uceFault_signextend16_2(i) || uceFault_signextend16_2(i))
    202        assertEq(x, -99  /* = (-99 << 16) >> 16 */);
    203    assertRecoveredOnBailout(x, true);
    204    return i;
    205 }
    206 
    207 var uceFault_add_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_add_number'));
    208 function radd_number(i) {
    209    var x = 1 + i;
    210    if (uceFault_add_number(i) || uceFault_add_number(i))
    211        assertEq(x, 100  /* = 1 + 99 */);
    212    assertRecoveredOnBailout(x, true);
    213    return i;
    214 }
    215 
    216 var uceFault_add_float = eval(`(${uceFault})`.replace('uceFault', 'uceFault_add_float'));
    217 function radd_float(i) {
    218    var t = Math.fround(1/3);
    219    var fi = Math.fround(i);
    220    var x = Math.fround(Math.fround(Math.fround(Math.fround(t + fi) + t) + fi) + t);
    221    if (uceFault_add_float(i) || uceFault_add_float(i))
    222        assertEq(x, 199); /* != 199.00000002980232 (when computed with double additions) */
    223    assertRecoveredOnBailout(x, true);
    224    return i;
    225 }
    226 
    227 var uceFault_add_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_add_object'));
    228 function radd_object(i) {
    229    var t = i;
    230    var o = { valueOf: function () { return t; } };
    231    var x = o + i; /* computed with t == i, not 1000 */
    232    t = 1000;
    233    if (uceFault_add_object(i) || uceFault_add_object(i))
    234        assertEq(x, 198);
    235    assertRecoveredOnBailout(x, false);
    236    return i;
    237 }
    238 
    239 var uceFault_sub_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sub_number'));
    240 function rsub_number(i) {
    241    var x = 1 - i;
    242    if (uceFault_sub_number(i) || uceFault_sub_number(i))
    243        assertEq(x, -98  /* = 1 - 99 */);
    244    assertRecoveredOnBailout(x, true);
    245    return i;
    246 }
    247 
    248 var uceFault_sub_float = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sub_float'));
    249 function rsub_float(i) {
    250    var t = Math.fround(1/3);
    251    var fi = Math.fround(i);
    252    var x = Math.fround(Math.fround(Math.fround(Math.fround(t - fi) - t) - fi) - t);
    253    if (uceFault_sub_float(i) || uceFault_sub_float(i))
    254        assertEq(x, -198.3333282470703); /* != -198.33333334326744 (when computed with double subtractions) */
    255    assertRecoveredOnBailout(x, true);
    256    return i;
    257 }
    258 
    259 var uceFault_sub_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sub_object'));
    260 function rsub_object(i) {
    261    var t = i;
    262    var o = { valueOf: function () { return t; } };
    263    var x = o - i; /* computed with t == i, not 1000 */
    264    t = 1000;
    265    if (uceFault_sub_object(i) || uceFault_sub_object(i))
    266        assertEq(x, 0);
    267    assertRecoveredOnBailout(x, false);
    268    return i;
    269 }
    270 
    271 var uceFault_mul_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_mul_number'));
    272 function rmul_number(i) {
    273    var x = 2 * i;
    274    if (uceFault_mul_number(i) || uceFault_mul_number(i))
    275        assertEq(x, 198  /* = 2 * 99 */);
    276    assertRecoveredOnBailout(x, true);
    277    return i;
    278 }
    279 
    280 var uceFault_mul_overflow = eval(`(${uceFault})`.replace('uceFault', 'uceFault_mul_overflow'));
    281 function rmul_overflow(i) {
    282    var x = Math.pow(2, i * 16 / 99) | 0;
    283    x = x * x;
    284    if (uceFault_mul_overflow(i) || uceFault_mul_overflow(i))
    285        assertEq(x, Math.pow(2, 32));
    286    assertRecoveredOnBailout(x, true);
    287    return i;
    288 }
    289 
    290 var uceFault_mul_float = eval(`(${uceFault})`.replace('uceFault', 'uceFault_mul_float'));
    291 function rmul_float(i) {
    292    var t = Math.fround(1/3);
    293    var fi = Math.fround(i);
    294    var x = Math.fround(Math.fround(Math.fround(Math.fround(t * fi) * t) * fi) * t);
    295    if (uceFault_mul_float(i) || uceFault_mul_float(i))
    296        assertEq(x, 363); /* != 363.0000324547301 (when computed with double multiplications) */
    297    assertRecoveredOnBailout(x, true);
    298    return i;
    299 }
    300 
    301 var uceFault_mul_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_mul_object'));
    302 function rmul_object(i) {
    303    var t = i;
    304    var o = { valueOf: function () { return t; } };
    305    var x = o * i; /* computed with t == i, not 1000 */
    306    t = 1000;
    307    if (uceFault_mul_object(i) || uceFault_mul_object(i))
    308        assertEq(x, 9801);
    309    assertRecoveredOnBailout(x, false);
    310    return i;
    311 }
    312 
    313 var uceFault_imul_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_imul_number'));
    314 function rimul_number(i) {
    315    var x = Math.imul(2, i);
    316    if (uceFault_imul_number(i) || uceFault_imul_number(i))
    317        assertEq(x, 198  /* = 2 * 99 */);
    318    assertRecoveredOnBailout(x, true);
    319    return i;
    320 }
    321 
    322 var uceFault_imul_overflow = eval(`(${uceFault})`.replace('uceFault', 'uceFault_imul_overflow'));
    323 function rimul_overflow(i) {
    324    var x = Math.pow(2, i * 16 / 99) | 0;
    325    x = Math.imul(x, x);
    326    if (uceFault_imul_overflow(i) || uceFault_imul_overflow(i))
    327        assertEq(x, 0);
    328    assertRecoveredOnBailout(x, true);
    329    return i;
    330 }
    331 
    332 var uceFault_imul_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_imul_object'));
    333 function rimul_object(i) {
    334    var t = i;
    335    var o = { valueOf: function () { return t; } };
    336    var x = Math.imul(o, i); /* computed with t == i, not 1000 */
    337    t = 1000;
    338    if (uceFault_imul_object(i) || uceFault_imul_object(i))
    339        assertEq(x, 9801);
    340    assertRecoveredOnBailout(x, false);
    341    return i;
    342 }
    343 
    344 var uceFault_div_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_div_number'));
    345 function rdiv_number(i) {
    346    i = i | 0;
    347    if (i < 1) { return i; }
    348    var x = 1 / i;
    349    if (uceFault_div_number(i) || uceFault_div_number(i))
    350        assertEq(x, 0.010101010101010102  /* = 1 / 99 */);
    351    assertRecoveredOnBailout(x, true);
    352    return i;
    353 }
    354 
    355 var uceFault_div_double = eval(`(${uceFault})`.replace('uceFault', 'uceFault_div_double'));
    356 function rdiv_double(i) {
    357    var x = 1 / i;
    358    if (uceFault_div_double(i) || uceFault_div_double(i))
    359        assertEq(x, 0.010101010101010102  /* = 1 / 99 */);
    360    assertRecoveredOnBailout(x, true);
    361    return i;
    362 }
    363 
    364 var uceFault_div_float = eval(`(${uceFault})`.replace('uceFault', 'uceFault_div_float'));
    365 function rdiv_float(i) {
    366    var t = Math.fround(1/3);
    367    var fi = Math.fround(i);
    368    var x = Math.fround(Math.fround(Math.fround(Math.fround(t / fi) / t) / fi) / t);
    369    if (uceFault_div_float(i) || uceFault_div_float(i))
    370        assertEq(x, 0.0003060912131331861); /* != 0.0003060912060598955 (when computed with double divisions) */
    371    assertRecoveredOnBailout(x, true);
    372    return i;
    373 }
    374 
    375 var uceFault_div_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_div_object'));
    376 function rdiv_object(i) {
    377    var t = i;
    378    var o = { valueOf: function () { return t; } };
    379    var x = o / i; /* computed with t == i, not 1000 */
    380    t = 1000;
    381    if (uceFault_div_object(i) || uceFault_div_object(i))
    382        assertEq(x, 1);
    383    assertRecoveredOnBailout(x, false);
    384    return i;
    385 }
    386 
    387 var uceFault_mod_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_mod_number'));
    388 function rmod_number(i) {
    389    var x = i % 98;
    390    if (uceFault_mod_number(i) || uceFault_mod_number(i))
    391        assertEq(x, 1); /* 99 % 98 = 1 */
    392    assertRecoveredOnBailout(x, true);
    393    return i;
    394 }
    395 
    396 var uceFault_mod_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_mod_object'));
    397 function rmod_object(i) {
    398    var t = i;
    399    var o = { valueOf: function() { return t; } };
    400    var x = o % 98; /* computed with t == i, not 1000 */
    401    t = 1000;
    402    if(uceFault_mod_object(i) || uceFault_mod_object(i))
    403        assertEq(x, 1); /* 99 % 98 = 1 */
    404    assertRecoveredOnBailout(x, false);
    405    return i;
    406 }
    407 
    408 var uceFault_not_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_not_number'));
    409 function rnot_number(i) {
    410    var x = !i;
    411    if (uceFault_not_number(i) || uceFault_not_number(i))
    412        assertEq(x, false /* = !99 */);
    413    assertRecoveredOnBailout(x, true);
    414    return i;
    415 }
    416 
    417 var uceFault_not_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_not_object'));
    418 function rnot_object(i) {
    419    var o = createIsHTMLDDA();
    420    var x = !o;
    421    if(uceFault_not_object(i) || uceFault_not_object(i))
    422        assertEq(x, true /* = !undefined = !document.all = !createIsHTMLDDA() */);
    423    assertRecoveredOnBailout(x, true);
    424    return i;
    425 }
    426 
    427 let uceFault_not_bigint_intptr = eval(`(${uceFault})`.replace('uceFault', 'uceFault_not_bigint_intptr'));
    428 function rnot_bigint_intptr(i) {
    429    var y = BigInt(i) + 1n;
    430    var x = !y;
    431    if (uceFault_not_bigint_intptr(i) || uceFault_not_bigint_intptr(i))
    432        assertEq(x, false /* = !100n */);
    433    assertRecoveredOnBailout(x, true);
    434    return y;
    435 }
    436 
    437 let uceFault_not_bigint_int64 = eval(`(${uceFault})`.replace('uceFault', 'uceFault_not_bigint_int64'));
    438 function rnot_bigint_int64(i) {
    439    var ta = new BigInt64Array(1);
    440    var y = ta[0];
    441    var x = !y;
    442    if (uceFault_not_bigint_int64(i) || uceFault_not_bigint_int64(i))
    443        assertEq(x, true /* = !0n */);
    444    assertRecoveredOnBailout(x, true);
    445    return y;
    446 }
    447 
    448 var uceFault_compare_number_eq = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_number_eq'));
    449 function rcompare_number_eq(i) {
    450    var x = i == 99;
    451    if (uceFault_compare_number_eq(i) || uceFault_compare_number_eq(i))
    452        assertEq(x, true);
    453    assertRecoveredOnBailout(x, true);
    454    return i;
    455 }
    456 
    457 var uceFault_compare_number_stricteq = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_number_stricteq'));
    458 function rcompare_number_stricteq(i) {
    459    var x = i === 99;
    460    if (uceFault_compare_number_stricteq(i) || uceFault_compare_number_stricteq(i))
    461        assertEq(x, true);
    462    assertRecoveredOnBailout(x, true);
    463    return i;
    464 }
    465 
    466 var uceFault_compare_number_ne = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_number_ne'));
    467 function rcompare_number_ne(i) {
    468    var x = i != 99;
    469    if (uceFault_compare_number_ne(i) || uceFault_compare_number_ne(i))
    470        assertEq(x, false);
    471    assertRecoveredOnBailout(x, true);
    472    return i;
    473 }
    474 
    475 var uceFault_compare_number_strictne = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_number_strictne'));
    476 function rcompare_number_strictne(i) {
    477    var x = i !== 99;
    478    if (uceFault_compare_number_strictne(i) || uceFault_compare_number_strictne(i))
    479        assertEq(x, false);
    480    assertRecoveredOnBailout(x, true);
    481    return i;
    482 }
    483 
    484 var uceFault_compare_number_lt = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_number_lt'));
    485 function rcompare_number_lt(i) {
    486    var x = i < 99;
    487    if (uceFault_compare_number_lt(i) || uceFault_compare_number_lt(i))
    488        assertEq(x, false);
    489    assertRecoveredOnBailout(x, true);
    490    return i;
    491 }
    492 
    493 var uceFault_compare_number_le = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_number_le'));
    494 function rcompare_number_le(i) {
    495    var x = i <= 99;
    496    if (uceFault_compare_number_le(i) || uceFault_compare_number_le(i))
    497        assertEq(x, true);
    498    assertRecoveredOnBailout(x, true);
    499    return i;
    500 }
    501 
    502 var uceFault_compare_number_gt = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_number_gt'));
    503 function rcompare_number_gt(i) {
    504    var x = i > 99;
    505    if (uceFault_compare_number_gt(i) || uceFault_compare_number_gt(i))
    506        assertEq(x, false);
    507    assertRecoveredOnBailout(x, true);
    508    return i;
    509 }
    510 
    511 var uceFault_compare_number_ge = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_number_ge'));
    512 function rcompare_number_ge(i) {
    513    var x = i >= 99;
    514    if (uceFault_compare_number_ge(i) || uceFault_compare_number_ge(i))
    515        assertEq(x, true);
    516    assertRecoveredOnBailout(x, true);
    517    return i;
    518 }
    519 
    520 var uceFault_compare_string_eq = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_string_eq'));
    521 function rcompare_string_eq(i) {
    522    var x = String(i) == "99";
    523    if (uceFault_compare_string_eq(i) || uceFault_compare_string_eq(i))
    524        assertEq(x, true);
    525    assertRecoveredOnBailout(x, true);
    526    return i;
    527 }
    528 
    529 var uceFault_compare_string_stricteq = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_string_stricteq'));
    530 function rcompare_string_stricteq(i) {
    531    var x = String(i) === "99";
    532    if (uceFault_compare_string_stricteq(i) || uceFault_compare_string_stricteq(i))
    533        assertEq(x, true);
    534    assertRecoveredOnBailout(x, true);
    535    return i;
    536 }
    537 
    538 var uceFault_compare_string_ne = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_string_ne'));
    539 function rcompare_string_ne(i) {
    540    var x = String(i) != "99";
    541    if (uceFault_compare_string_ne(i) || uceFault_compare_string_ne(i))
    542        assertEq(x, false);
    543    assertRecoveredOnBailout(x, true);
    544    return i;
    545 }
    546 
    547 var uceFault_compare_string_strictne = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_string_strictne'));
    548 function rcompare_string_strictne(i) {
    549    var x = String(i) !== "99";
    550    if (uceFault_compare_string_strictne(i) || uceFault_compare_string_strictne(i))
    551        assertEq(x, false);
    552    assertRecoveredOnBailout(x, true);
    553    return i;
    554 }
    555 
    556 var uceFault_compare_string_lt = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_string_lt'));
    557 function rcompare_string_lt(i) {
    558    var x = String(i) < "99";
    559    if (uceFault_compare_string_lt(i) || uceFault_compare_string_lt(i))
    560        assertEq(x, false);
    561    assertRecoveredOnBailout(x, true);
    562    return i;
    563 }
    564 
    565 var uceFault_compare_string_le = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_string_le'));
    566 function rcompare_string_le(i) {
    567    var x = String(i) <= "99";
    568    if (uceFault_compare_string_le(i) || uceFault_compare_string_le(i))
    569        assertEq(x, true);
    570    assertRecoveredOnBailout(x, true);
    571    return i;
    572 }
    573 
    574 var uceFault_compare_string_gt = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_string_gt'));
    575 function rcompare_string_gt(i) {
    576    var x = String(i) > "99";
    577    if (uceFault_compare_string_gt(i) || uceFault_compare_string_gt(i))
    578        assertEq(x, false);
    579    assertRecoveredOnBailout(x, true);
    580    return i;
    581 }
    582 
    583 var uceFault_compare_string_ge = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_string_ge'));
    584 function rcompare_string_ge(i) {
    585    var x = String(i) >= "99";
    586    if (uceFault_compare_string_ge(i) || uceFault_compare_string_ge(i))
    587        assertEq(x, true);
    588    assertRecoveredOnBailout(x, true);
    589    return i;
    590 }
    591 
    592 var uceFault_compare_bigint_eq = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_bigint_eq'));
    593 function rcompare_bigint_eq(i, bi) {
    594    var x = bi == 99n;
    595    if (uceFault_compare_bigint_eq(i) || uceFault_compare_bigint_eq(i))
    596        assertEq(x, true);
    597    assertRecoveredOnBailout(x, true);
    598    return i;
    599 }
    600 
    601 var uceFault_compare_bigint_stricteq = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_bigint_stricteq'));
    602 function rcompare_bigint_stricteq(i, bi) {
    603    var x = bi === 99n;
    604    if (uceFault_compare_bigint_stricteq(i) || uceFault_compare_bigint_stricteq(i))
    605        assertEq(x, true);
    606    assertRecoveredOnBailout(x, true);
    607    return i;
    608 }
    609 
    610 var uceFault_compare_bigint_ne = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_bigint_ne'));
    611 function rcompare_bigint_ne(i, bi) {
    612    var x = bi != 99n;
    613    if (uceFault_compare_bigint_ne(i) || uceFault_compare_bigint_ne(i))
    614        assertEq(x, false);
    615    assertRecoveredOnBailout(x, true);
    616    return i;
    617 }
    618 
    619 var uceFault_compare_bigint_strictne = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_bigint_strictne'));
    620 function rcompare_bigint_strictne(i, bi) {
    621    var x = bi !== 99n;
    622    if (uceFault_compare_bigint_strictne(i) || uceFault_compare_bigint_strictne(i))
    623        assertEq(x, false);
    624    assertRecoveredOnBailout(x, true);
    625    return i;
    626 }
    627 
    628 var uceFault_compare_bigint_lt = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_bigint_lt'));
    629 function rcompare_bigint_lt(i, bi) {
    630    var x = bi < 99n;
    631    if (uceFault_compare_bigint_lt(i) || uceFault_compare_bigint_lt(i))
    632        assertEq(x, false);
    633    assertRecoveredOnBailout(x, true);
    634    return i;
    635 }
    636 
    637 var uceFault_compare_bigint_le = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_bigint_le'));
    638 function rcompare_bigint_le(i, bi) {
    639    var x = bi <= 99n;
    640    if (uceFault_compare_bigint_le(i) || uceFault_compare_bigint_le(i))
    641        assertEq(x, true);
    642    assertRecoveredOnBailout(x, true);
    643    return i;
    644 }
    645 
    646 var uceFault_compare_bigint_gt = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_bigint_gt'));
    647 function rcompare_bigint_gt(i, bi) {
    648    var x = bi > 99n;
    649    if (uceFault_compare_bigint_gt(i) || uceFault_compare_bigint_gt(i))
    650        assertEq(x, false);
    651    assertRecoveredOnBailout(x, true);
    652    return i;
    653 }
    654 
    655 var uceFault_compare_bigint_ge = eval(`(${uceFault})`.replace('uceFault', 'uceFault_compare_bigint_ge'));
    656 function rcompare_bigint_ge(i, bi) {
    657    var x = bi >= 99n;
    658    if (uceFault_compare_bigint_ge(i) || uceFault_compare_bigint_ge(i))
    659        assertEq(x, true);
    660    assertRecoveredOnBailout(x, true);
    661    return i;
    662 }
    663 
    664 var uceFault_concat_string = eval(`(${uceFault})`.replace('uceFault', 'uceFault_concat_string'));
    665 function rconcat_string(i) {
    666    var x = "s" + i.toString();
    667    if (uceFault_concat_string(i) || uceFault_concat_string(i))
    668        assertEq(x, "s99");
    669    assertRecoveredOnBailout(x, true);
    670    return i;
    671 }
    672 
    673 var uceFault_concat_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_concat_number'));
    674 function rconcat_number(i) {
    675    var x = "s" + i;
    676    if (uceFault_concat_number(i) || uceFault_concat_number(i))
    677        assertEq(x, "s99");
    678    assertRecoveredOnBailout(x, true);
    679    return i;
    680 }
    681 
    682 var uceFault_string_length = eval(`(${uceFault})`.replace('uceFault', 'uceFault_string_length'));
    683 function rstring_length(i) {
    684    var x = i.toString().length;
    685    if (uceFault_string_length(i) || uceFault_string_length(i))
    686        assertEq(x, 2);
    687    assertRecoveredOnBailout(x, true);
    688    return i;
    689 }
    690 
    691 var uceFault_arguments_length_1 = eval(`(${uceFault})`.replace('uceFault', 'uceFault_arguments_length_1'));
    692 function rarguments_length_1(i) {
    693    var x = arguments.length;
    694    if (uceFault_arguments_length_1(i) || uceFault_arguments_length_1(i))
    695        assertEq(x, 1);
    696    assertRecoveredOnBailout(x, true);
    697    return i;
    698 }
    699 
    700 var uceFault_arguments_length_3 = eval(`(${uceFault})`.replace('uceFault', 'uceFault_arguments_length_3'));
    701 function rarguments_length_3(i) {
    702    var x = arguments.length;
    703    if (uceFault_arguments_length_3(i) || uceFault_arguments_length_3(i))
    704        assertEq(x, 3);
    705    assertRecoveredOnBailout(x, true);
    706    return i;
    707 }
    708 
    709 function ret_argumentsLength() { return arguments.length; }
    710 
    711 var uceFault_inline_arguments_length_1 = eval(`(${uceFault})`.replace('uceFault', 'uceFault_inline_arguments_length_1'));
    712 function rinline_arguments_length_1(i) {
    713    var x = ret_argumentsLength.apply(this, arguments);
    714    if (uceFault_inline_arguments_length_1(i) || uceFault_inline_arguments_length_1(i))
    715        assertEq(x, 1);
    716    // We cannot garantee that the function would be inlined
    717    // assertRecoveredOnBailout(x, true);
    718    return i;
    719 }
    720 
    721 var uceFault_inline_arguments_length_3 = eval(`(${uceFault})`.replace('uceFault', 'uceFault_inline_arguments_length_3'));
    722 function rinline_arguments_length_3(i) {
    723    var x = ret_argumentsLength.apply(this, arguments);
    724    if (uceFault_inline_arguments_length_3(i) || uceFault_inline_arguments_length_3(i))
    725        assertEq(x, 3);
    726    // We cannot garantee that the function would be inlined
    727    // assertRecoveredOnBailout(x, true);
    728    return i;
    729 }
    730 
    731 var uceFault_floor_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_floor_number'));
    732 function rfloor_number(i) {
    733    var x = Math.floor(i + 0.1111);
    734    if (uceFault_floor_number(i) || uceFault_floor_number(i))
    735        assertEq(x, i);
    736    assertRecoveredOnBailout(x, true);
    737    return i;
    738 }
    739 
    740 var uceFault_floor_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_floor_object'));
    741 function rfloor_object(i) {
    742    var t = i + 0.1111;
    743    var o = { valueOf: function () { return t; } };
    744    var x = Math.floor(o);
    745    t = 1000.1111;
    746    if (uceFault_floor_object(i) || uceFault_floor_object(i))
    747        assertEq(x, i);
    748    assertRecoveredOnBailout(x, false);
    749    return i;
    750 }
    751 
    752 let uceFault_floor_double = eval(`(${uceFault})`.replace('uceFault', 'uceFault_floor_double'));
    753 function rfloor_double(i) {
    754    const x = Math.floor(i + (-1 >>> 0));
    755    if (uceFault_floor_double(i) || uceFault_floor_double(i))
    756        assertEq(x, 99 + (-1 >>> 0)); /* = i + 2 ^ 32 - 1 */
    757    assertRecoveredOnBailout(x, true);
    758    return i;
    759 }
    760 
    761 var uceFault_ceil_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_ceil_number'));
    762 function rceil_number(i) {
    763    var x = Math.ceil(-i - 0.12010799100);
    764    if (uceFault_ceil_number(i) || uceFault_ceil_number(i))
    765        assertEq(x, -i);
    766    assertRecoveredOnBailout(x, true);
    767    return i;
    768 }
    769 
    770 let uceFault_ceil_double = eval(`(${uceFault})`.replace('uceFault', 'uceFault_ceil_double'));
    771 function rceil_double(i) {
    772    const x = Math.ceil(i + (-1 >>> 0));
    773    if (uceFault_ceil_double(i) || uceFault_ceil_double(i))
    774        assertEq(x, 99 + (-1 >>> 0)); /* = i + 2 ^ 32 - 1 */
    775    assertRecoveredOnBailout(x, true);
    776    return i;
    777 }
    778 
    779 var uceFault_round_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_round'));
    780 function rround_number(i) {
    781    var x = Math.round(i + 1.4);
    782    if (uceFault_round_number(i) || uceFault_round_number(i))
    783        assertEq(x, 100); /* = i + 1*/
    784    assertRecoveredOnBailout(x, true);
    785    return i;
    786 }
    787 
    788 var uceFault_round_double = eval(`(${uceFault})`.replace('uceFault', 'uceFault_round_double'));
    789 function rround_double(i) {
    790    var x = Math.round(i + (-1 >>> 0));
    791    if (uceFault_round_double(i) || uceFault_round_double(i))
    792        assertEq(x, 99 + (-1 >>> 0)); /* = i + 2 ^ 32 - 1 */
    793    assertRecoveredOnBailout(x, true);
    794    return i;
    795 }
    796 
    797 var uceFault_trunc_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_trunc_number'));
    798 function rtrunc_number(i) {
    799    var x = Math.trunc(-i - 0.12010799100);
    800    if (uceFault_trunc_number(i) || uceFault_trunc_number(i))
    801        assertEq(x, -i);
    802    assertRecoveredOnBailout(x, true);
    803    return i;
    804 }
    805 
    806 let uceFault_trunc_double = eval(`(${uceFault})`.replace('uceFault', 'uceFault_trunc_double'));
    807 function rtrunc_double(i) {
    808    const x = Math.trunc(i + (-1 >>> 0));
    809    if (uceFault_trunc_double(i) || uceFault_trunc_double(i))
    810        assertEq(x, 99 + (-1 >>> 0)); /* = i + 2 ^ 32 - 1 */
    811    assertRecoveredOnBailout(x, true);
    812    return i;
    813 }
    814 
    815 var uceFault_Char_Code_At = eval(`(${uceFault})`.replace('uceFault', 'uceFault_Char_Code_At'));
    816 function rcharCodeAt(i) {
    817    var s = "aaaaa";
    818    var x = s.charCodeAt(i % 4);
    819    if (uceFault_Char_Code_At(i) || uceFault_Char_Code_At(i))
    820        assertEq(x, 97 );
    821    assertRecoveredOnBailout(x, true);
    822    return i;
    823 }
    824 
    825 var uceFault_from_char_code = eval(`(${uceFault})`.replace('uceFault', 'uceFault_from_char_code'));
    826 function rfrom_char_code(i) {
    827    var x = String.fromCharCode(i);
    828    if (uceFault_from_char_code(i) || uceFault_from_char_code(i))
    829        assertEq(x, "c");
    830    assertRecoveredOnBailout(x, true);
    831    return i;
    832 }
    833 
    834 var uceFault_from_char_code_non_ascii = eval(`(${uceFault})`.replace('uceFault', 'uceFault_from_char_code_non_ascii'));
    835 function rfrom_char_code_non_ascii(i) {
    836    var x = String.fromCharCode(i * 100);
    837    if (uceFault_from_char_code_non_ascii(i) || uceFault_from_char_code_non_ascii(i))
    838        assertEq(x, "\u26AC");
    839    assertRecoveredOnBailout(x, true);
    840    return i;
    841 }
    842 
    843 var uceFault_pow_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_pow_number'));
    844 function rpow_number(i) {
    845    var x = Math.pow(i, 3.14159);
    846    if (uceFault_pow_number(i) || uceFault_pow_number(i))
    847        assertEq(x, Math.pow(99, 3.14159));
    848    assertRecoveredOnBailout(x, true);
    849    return i;
    850 }
    851 
    852 var uceFault_pow_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_pow_object'));
    853 function rpow_object(i) {
    854    var t = i;
    855    var o = { valueOf: function () { return t; } };
    856    var x = Math.pow(o, 3.14159); /* computed with t == i, not 1.5 */
    857    t = 1.5;
    858    if (uceFault_pow_object(i) || uceFault_pow_object(i))
    859        assertEq(x, Math.pow(99, 3.14159));
    860    assertRecoveredOnBailout(x, false);
    861    return i;
    862 }
    863 
    864 var uceFault_powhalf_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_powhalf_number'));
    865 function rpowhalf_number(i) {
    866    var x = Math.pow(i, 0.5);
    867    if (uceFault_powhalf_number(i) || uceFault_powhalf_number(i))
    868        assertEq(x, Math.pow(99, 0.5));
    869    assertRecoveredOnBailout(x, true);
    870    return i;
    871 }
    872 
    873 var uceFault_powhalf_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_powhalf_object'));
    874 function rpowhalf_object(i) {
    875    var t = i;
    876    var o = { valueOf: function () { return t; } };
    877    var x = Math.pow(o, 0.5); /* computed with t == i, not 1.5 */
    878    t = 1.5;
    879    if (uceFault_powhalf_object(i) || uceFault_powhalf_object(i))
    880        assertEq(x, Math.pow(99, 0.5));
    881    assertRecoveredOnBailout(x, false);
    882    return i;
    883 }
    884 
    885 var uceFault_min_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_min_number'));
    886 function rmin_number(i) {
    887    var x = Math.min(i, i-1, i-2.1);
    888    if (uceFault_min_number(i) || uceFault_min_number(i))
    889        assertEq(x, i-2.1);
    890    assertRecoveredOnBailout(x, true);
    891    return i;
    892 }
    893 
    894 var uceFault_min_float = eval(`(${uceFault})`.replace('uceFault', 'uceFault_min_float'));
    895 function rmin_float(i) {
    896    var x = Math.fround(Math.min(Math.fround(i), Math.fround(13.37)));
    897    if (uceFault_min_number(i) || uceFault_min_number(i))
    898        assertEq(x, Math.fround(13.37));
    899    assertRecoveredOnBailout(x, true);
    900    return i;
    901 }
    902 
    903 var uceFault_min_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_min_object'));
    904 function rmin_object(i) {
    905    var t = i;
    906    var o = { valueOf: function () { return t; } };
    907    var x = Math.min(o, o-1, o-2.1)
    908    t = 1000;
    909    if (uceFault_min_object(i) || uceFault_min_object(i))
    910        assertEq(x, i-2.1);
    911    assertRecoveredOnBailout(x, false);
    912    return i;
    913 }
    914 
    915 var uceFault_max_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_max_number'));
    916 function rmax_number(i) {
    917    var x = Math.max(i, i-1, i-2.1);
    918    if (uceFault_max_number(i) || uceFault_max_number(i))
    919        assertEq(x, i);
    920    assertRecoveredOnBailout(x, true);
    921    return i;
    922 }
    923 
    924 var uceFault_max_float = eval(`(${uceFault})`.replace('uceFault', 'uceFault_max_float'));
    925 function rmax_float(i) {
    926    var x = Math.fround(Math.max(Math.fround(-i), Math.fround(13.37)));
    927    if (uceFault_max_number(i) || uceFault_max_number(i))
    928        assertEq(x, Math.fround(13.37));
    929    assertRecoveredOnBailout(x, true);
    930    return i;
    931 }
    932 
    933 var uceFault_max_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_max_object'));
    934 function rmax_object(i) {
    935    var t = i;
    936    var o = { valueOf: function () { return t; } };
    937    var x = Math.max(o, o-1, o-2.1)
    938    t = 1000;
    939    if (uceFault_max_object(i) || uceFault_max_object(i))
    940        assertEq(x, i);
    941    assertRecoveredOnBailout(x, false);
    942    return i;
    943 }
    944 
    945 var uceFault_abs = eval(`(${uceFault})`.replace('uceFault', 'uceFault_abs'));
    946 function rabs_number(i) {
    947    var x = Math.abs(i-42);
    948    if (uceFault_abs(i) || uceFault_abs(i))
    949        assertEq(x, 57);
    950    assertRecoveredOnBailout(x, true);
    951    return i;
    952 }
    953 
    954 var uceFault_abs_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_abs_object'));
    955 function rabs_object(i) {
    956    var t = -i;
    957    var o = { valueOf: function() { return t; } };
    958    var x = Math.abs(o); /* computed with t == i, not 1000 */
    959    t = 1000;
    960    if(uceFault_abs_object(i) || uceFault_abs_object(i))
    961        assertEq(x, 99);
    962    assertRecoveredOnBailout(x, false);
    963    return i;
    964 }
    965 
    966 var uceFault_sqrt_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sqrt_number'));
    967 function rsqrt_number(i) {
    968    var x = Math.sqrt(i);
    969    if (uceFault_sqrt_number(i) || uceFault_sqrt_number(i))
    970        assertEq(x, Math.sqrt(99));
    971    assertRecoveredOnBailout(x, true);
    972    return i;
    973 }
    974 
    975 var uceFault_sqrt_float = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sqrt_float'));
    976 function rsqrt_float(i) {
    977    var x = Math.fround(Math.sqrt(Math.fround(i)));
    978    if (uceFault_sqrt_float(i) || uceFault_sqrt_float(i))
    979        assertEq(x, Math.fround(Math.sqrt(Math.fround(99)))); /* != 9.9498743710662 (when computed with double sqrt) */
    980    assertRecoveredOnBailout(x, true);
    981    return i;
    982 }
    983 
    984 var uceFault_sqrt_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sqrt_object'));
    985 function rsqrt_object(i) {
    986    var t = i;
    987    var o = { valueOf: function () { return t; } };
    988    var x = Math.sqrt(o); /* computed with t == i, not 1.5 */
    989    t = 1.5;
    990    if (uceFault_sqrt_object(i) || uceFault_sqrt_object(i))
    991        assertEq(x, Math.sqrt(99));
    992    assertRecoveredOnBailout(x, false);
    993    return i;
    994 }
    995 
    996 var uceFault_atan2_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_atan2_number'));
    997 function ratan2_number(i) {
    998    var x = Math.atan2(i, i+1);
    999    if (uceFault_atan2_number(i) || uceFault_atan2_number(i))
   1000        assertEq(x, Math.atan2(99, 100));
   1001    assertRecoveredOnBailout(x, true);
   1002    return i;
   1003 }
   1004 
   1005 var uceFault_atan2_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_atan2_object'));
   1006 function ratan2_object(i) {
   1007    var t = i;
   1008    var o = { valueOf: function () { return t; } };
   1009    var x = Math.atan2(o, o+1);
   1010    t = 1000;
   1011    if (uceFault_atan2_object(i) || uceFault_atan2_object(i))
   1012        assertEq(x, Math.atan2(i, i+1));
   1013    assertRecoveredOnBailout(x, false);
   1014    return i;
   1015 }
   1016 
   1017 var uceFault_str_split = eval(`(${uceFault})`.replace('uceFault', 'uceFault_str_split'))
   1018 function rstr_split(i) {
   1019    var x = "str01234567899876543210rts".split("" + i);
   1020    if (uceFault_str_split(i) || uceFault_str_split(i))
   1021        assertEq(x[0], "str012345678");
   1022    assertRecoveredOnBailout(x, true);
   1023    return i;
   1024 }
   1025 
   1026 var uceFault_regexp_exec = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_exec'))
   1027 function rregexp_exec(i) {
   1028    var re = new RegExp("(str)\\d+" + i + "\\d+rts");
   1029    var res = re.exec("str01234567899876543210rts");
   1030    if (uceFault_regexp_exec(i) || uceFault_regexp_exec(i))
   1031        assertEq(res[1], "str");
   1032    assertRecoveredOnBailout(res, false);
   1033    return i;
   1034 }
   1035 var uceFault_regexp_y_exec = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_y_exec'))
   1036 function rregexp_y_exec(i) {
   1037    var re = new RegExp("(str)\\d+" + (i % 10), "y");
   1038    var res = re.exec("str00123456789");
   1039    if (uceFault_regexp_y_exec(i) || uceFault_regexp_y_exec(i))
   1040        assertEq(res[1], "str");
   1041    assertRecoveredOnBailout(res, false);
   1042    assertEq(re.lastIndex == 0, false);
   1043    return i;
   1044 }
   1045 
   1046 var uceFault_regexp_y_literal_exec = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_y_literal_exec'))
   1047 function rregexp_y_literal_exec(i) {
   1048    var re = /(str)\d*0/y;
   1049    var res = re.exec("str00123456789");
   1050    if (uceFault_regexp_y_literal_exec(i) || uceFault_regexp_y_literal_exec(i))
   1051        assertEq(res[1], "str");
   1052    assertRecoveredOnBailout(res, false);
   1053    assertEq(re.lastIndex == 0, false);
   1054    return i;
   1055 }
   1056 
   1057 var uceFault_regexp_g_exec = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_g_exec'))
   1058 function rregexp_g_exec(i) {
   1059    var re = new RegExp("(str)\\d+" + (i % 10), "g");
   1060    var res = re.exec("str00123456789str00123456789");
   1061    if (uceFault_regexp_g_exec(i) || uceFault_regexp_g_exec(i))
   1062        assertEq(res[1], "str");
   1063    assertRecoveredOnBailout(res, false);
   1064    assertEq(re.lastIndex == 0, false);
   1065    return i;
   1066 }
   1067 
   1068 var uceFault_regexp_g_literal_exec = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_g_literal_exec'))
   1069 function rregexp_g_literal_exec(i) {
   1070    var re = /(str)\d*0/g;
   1071    var res = re.exec("str00123456789str00123456789");
   1072    if (uceFault_regexp_g_literal_exec(i) || uceFault_regexp_g_literal_exec(i))
   1073        assertEq(res[1], "str");
   1074    assertRecoveredOnBailout(res, false);
   1075    assertEq(re.lastIndex == 0, false);
   1076    return i;
   1077 }
   1078 
   1079 var uceFault_regexp_i_exec = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_i_exec'))
   1080 function rregexp_i_exec(i) {
   1081    var re = new RegExp("(str)\\d+" + (i % 10), "i");
   1082    var res = re.exec("STR00123456789");
   1083    if (uceFault_regexp_i_exec(i) || uceFault_regexp_i_exec(i))
   1084        assertEq(res[1], "STR");
   1085    assertRecoveredOnBailout(res, false);
   1086    assertEq(re.lastIndex == 0, true);
   1087    return i;
   1088 }
   1089 
   1090 var uceFault_regexp_i_literal_exec = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_i_literal_exec'))
   1091 function rregexp_i_literal_exec(i) {
   1092    var re = /(str)\d*0/i;
   1093    var res = re.exec("STR00123456789");
   1094    if (uceFault_regexp_i_literal_exec(i) || uceFault_regexp_i_literal_exec(i))
   1095        assertEq(res[1], "STR");
   1096    assertRecoveredOnBailout(res, false);
   1097    assertEq(re.lastIndex == 0, true);
   1098    return i;
   1099 }
   1100 
   1101 
   1102 var uceFault_regexp_m_exec = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_m_exec'))
   1103 function rregexp_m_exec(i) {
   1104    var re = new RegExp("^(str)\\d+" + (i % 10), "m");
   1105    var res = re.exec("abc\nstr00123456789");
   1106    if (uceFault_regexp_m_exec(i) || uceFault_regexp_m_exec(i))
   1107        assertEq(res[1], "str");
   1108    assertRecoveredOnBailout(res, false);
   1109    assertEq(re.lastIndex == 0, true);
   1110    return i;
   1111 }
   1112 
   1113 var uceFault_regexp_m_literal_exec = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_m_literal_exec'))
   1114 function rregexp_m_literal_exec(i) {
   1115    var re = /^(str)\d*0/m;
   1116    var res = re.exec("abc\nstr00123456789");
   1117    if (uceFault_regexp_m_literal_exec(i) || uceFault_regexp_m_literal_exec(i))
   1118        assertEq(res[1], "str");
   1119    assertRecoveredOnBailout(res, false);
   1120    assertEq(re.lastIndex == 0, true);
   1121    return i;
   1122 }
   1123 
   1124 var uceFault_regexp_test = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_test'))
   1125 function rregexp_test(i) {
   1126    var re = new RegExp("str\\d+" + i + "\\d+rts");
   1127    var res = re.test("str01234567899876543210rts");
   1128    if (uceFault_regexp_test(i) || uceFault_regexp_test(i))
   1129        assertEq(res, true);
   1130    assertRecoveredOnBailout(res, false);
   1131    return i;
   1132 }
   1133 
   1134 var uceFault_regexp_y_test = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_y_test'))
   1135 function rregexp_y_test(i) {
   1136    var re = new RegExp("str\\d+" + (i % 10), "y");
   1137    var res = re.test("str00123456789");
   1138    if (uceFault_regexp_y_test(i) || uceFault_regexp_y_test(i))
   1139        assertEq(res, true);
   1140    assertRecoveredOnBailout(res, false);
   1141    assertEq(re.lastIndex == 0, false);
   1142    return i;
   1143 }
   1144 
   1145 var uceFault_regexp_y_literal_test = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_y_literal_test'))
   1146 function rregexp_y_literal_test(i) {
   1147    var re = /str\d*0/y;
   1148    var res = re.test("str00123456789");
   1149    if (uceFault_regexp_y_literal_test(i) || uceFault_regexp_y_literal_test(i))
   1150        assertEq(res, true);
   1151    assertRecoveredOnBailout(res, false);
   1152    assertEq(re.lastIndex == 0, false);
   1153    return i;
   1154 }
   1155 
   1156 var uceFault_regexp_g_test = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_g_test'))
   1157 function rregexp_g_test(i) {
   1158    var re = new RegExp("str\\d+" + (i % 10), "g");
   1159    var res = re.test("str00123456789str00123456789");
   1160    if (uceFault_regexp_g_test(i) || uceFault_regexp_g_test(i))
   1161        assertEq(res, true);
   1162    assertRecoveredOnBailout(res, false);
   1163    assertEq(re.lastIndex == 0, false);
   1164    return i;
   1165 }
   1166 
   1167 var uceFault_regexp_g_literal_test = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_g_literal_test'))
   1168 function rregexp_g_literal_test(i) {
   1169    var re = /str\d*0/g;
   1170    var res = re.test("str00123456789str00123456789");
   1171    if (uceFault_regexp_g_literal_test(i) || uceFault_regexp_g_literal_test(i))
   1172        assertEq(res, true);
   1173    assertRecoveredOnBailout(res, false);
   1174    assertEq(re.lastIndex == 0, false);
   1175    return i;
   1176 }
   1177 
   1178 var uceFault_regexp_i_test = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_i_test'))
   1179 function rregexp_i_test(i) {
   1180    var re = new RegExp("str\\d+" + (i % 10), "i");
   1181    var res = re.test("STR00123456789");
   1182    if (uceFault_regexp_i_test(i) || uceFault_regexp_i_test(i))
   1183        assertEq(res, true);
   1184    assertRecoveredOnBailout(res, false);
   1185    assertEq(re.lastIndex == 0, true);
   1186    return i;
   1187 }
   1188 
   1189 var uceFault_regexp_i_literal_test = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_i_literal_test'))
   1190 function rregexp_i_literal_test(i) {
   1191    var re = /str\d*0/i;
   1192    var res = re.test("STR00123456789");
   1193    if (uceFault_regexp_i_literal_test(i) || uceFault_regexp_i_literal_test(i))
   1194        assertEq(res, true);
   1195    assertRecoveredOnBailout(res, false);
   1196    assertEq(re.lastIndex == 0, true);
   1197    return i;
   1198 }
   1199 
   1200 var uceFault_regexp_m_test = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_m_test'))
   1201 function rregexp_m_test(i) {
   1202    var re = new RegExp("^str\\d+" + (i % 10), "m");
   1203    var res = re.test("abc\nstr00123456789");
   1204    if (uceFault_regexp_m_test(i) || uceFault_regexp_m_test(i))
   1205        assertEq(res, true);
   1206    assertRecoveredOnBailout(res, false);
   1207    assertEq(re.lastIndex == 0, true);
   1208    return i;
   1209 }
   1210 
   1211 var uceFault_regexp_m_literal_test = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_m_literal_test'))
   1212 function rregexp_m_literal_test(i) {
   1213    var re = /^str\d*0/m;
   1214    var res = re.test("abc\nstr00123456789");
   1215    if (uceFault_regexp_m_literal_test(i) || uceFault_regexp_m_literal_test(i))
   1216        assertEq(res, true);
   1217    assertRecoveredOnBailout(res, false);
   1218    assertEq(re.lastIndex == 0, true);
   1219    return i;
   1220 }
   1221 
   1222 var uceFault_regexp_replace = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_replace'))
   1223 function rregexp_replace(i) {
   1224    var re = new RegExp("str\\d+" + (i % 10));
   1225    var res = "str00123456789".replace(re, "abc");
   1226    if (uceFault_regexp_replace(i) || uceFault_regexp_replace(i))
   1227        assertEq(res, "abc");
   1228    assertRecoveredOnBailout(res, false);
   1229    return i;
   1230 }
   1231 
   1232 var uceFault_regexp_y_replace = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_y_replace'))
   1233 function rregexp_y_replace(i) {
   1234    var re = new RegExp("str\\d+" + (i % 10), "y");
   1235    re.test("str00123456789");
   1236    assertEq(re.lastIndex == 0, false);
   1237 
   1238    var res = "str00123456789".replace(re, "abc");
   1239 
   1240    assertEq(re.lastIndex, 0);
   1241 
   1242    assertEq(res, "str00123456789");
   1243 
   1244    res = "str00123456789".replace(re, "abc");
   1245    assertEq(re.lastIndex == 0, false);
   1246 
   1247    if (uceFault_regexp_y_replace(i) || uceFault_regexp_y_replace(i))
   1248        assertEq(res, "abc");
   1249    assertRecoveredOnBailout(res, false);
   1250    return i;
   1251 }
   1252 
   1253 var uceFault_regexp_y_literal_replace = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_y_literal_replace'))
   1254 function rregexp_y_literal_replace(i) {
   1255    var re = /str\d+9/y;
   1256    re.test("str00123456789");
   1257    assertEq(re.lastIndex == 0, false);
   1258 
   1259    var res = "str00123456789".replace(re, "abc");
   1260 
   1261    assertEq(re.lastIndex, 0);
   1262 
   1263    assertEq(res, "str00123456789");
   1264 
   1265    res = "str00123456789".replace(re, "abc");
   1266    assertEq(re.lastIndex == 0, false);
   1267 
   1268    if (uceFault_regexp_y_literal_replace(i) || uceFault_regexp_y_literal_replace(i))
   1269        assertEq(res, "abc");
   1270    assertRecoveredOnBailout(res, false);
   1271    return i;
   1272 }
   1273 
   1274 var uceFault_regexp_g_replace = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_g_replace'))
   1275 function rregexp_g_replace(i) {
   1276    var re = new RegExp("str\\d+" + (i % 10), "g");
   1277    re.test("str00123456789");
   1278    assertEq(re.lastIndex == 0, false);
   1279 
   1280    var res = "str00123456789".replace(re, "abc");
   1281 
   1282    // replace will always zero the lastIndex field, even if it was not zero before.
   1283    assertEq(re.lastIndex == 0, true);
   1284 
   1285    if (uceFault_regexp_g_replace(i) || uceFault_regexp_g_replace(i))
   1286        assertEq(res, "abc");
   1287    assertRecoveredOnBailout(res, false);
   1288    return i;
   1289 }
   1290 
   1291 var uceFault_regexp_g_literal_replace = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_g_literal_replace'))
   1292 function rregexp_g_literal_replace(i) {
   1293    var re = /str\d+9/g;
   1294    re.test("str00123456789");
   1295    assertEq(re.lastIndex == 0, false);
   1296 
   1297    var res = "str00123456789".replace(re, "abc");
   1298 
   1299    // replace will zero the lastIndex field.
   1300    assertEq(re.lastIndex == 0, true);
   1301 
   1302    if (uceFault_regexp_g_literal_replace(i) || uceFault_regexp_g_literal_replace(i))
   1303        assertEq(res, "abc");
   1304    assertRecoveredOnBailout(res, false);
   1305    return i;
   1306 }
   1307 
   1308 var uceFault_regexp_i_replace = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_i_replace'))
   1309 function rregexp_i_replace(i) {
   1310    var re = new RegExp("str\\d+" + (i % 10), "i");
   1311    re.test("STR00123456789");
   1312    assertEq(re.lastIndex == 0, true);
   1313 
   1314    var res = "STR00123456789".replace(re, "abc");
   1315 
   1316    assertEq(re.lastIndex == 0, true);
   1317 
   1318    if (uceFault_regexp_i_replace(i) || uceFault_regexp_i_replace(i))
   1319        assertEq(res, "abc");
   1320    assertRecoveredOnBailout(res, false);
   1321    return i;
   1322 }
   1323 
   1324 var uceFault_regexp_i_literal_replace = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_i_literal_replace'))
   1325 function rregexp_i_literal_replace(i) {
   1326    var re = /str\d+9/i;
   1327    re.test("STR00123456789");
   1328    assertEq(re.lastIndex == 0, true);
   1329 
   1330    var res = "str00123456789".replace(re, "abc");
   1331 
   1332    assertEq(re.lastIndex == 0, true);
   1333 
   1334    if (uceFault_regexp_i_literal_replace(i) || uceFault_regexp_i_literal_replace(i))
   1335        assertEq(res, "abc");
   1336    assertRecoveredOnBailout(res, false);
   1337    return i;
   1338 }
   1339 
   1340 var uceFault_regexp_m_replace = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_m_replace'))
   1341 function rregexp_m_replace(i) {
   1342    var re = new RegExp("^str\\d+" + (i % 10), "m");
   1343    re.test("abc\nstr00123456789");
   1344    assertEq(re.lastIndex == 0, true);
   1345 
   1346    var res = "abc\nstr00123456789".replace(re, "abc");
   1347 
   1348    assertEq(re.lastIndex == 0, true);
   1349 
   1350    if (uceFault_regexp_m_replace(i) || uceFault_regexp_m_replace(i))
   1351        assertEq(res, "abc\nabc");
   1352    assertRecoveredOnBailout(res, false);
   1353    return i;
   1354 }
   1355 
   1356 var uceFault_regexp_m_literal_replace = eval(`(${uceFault})`.replace('uceFault', 'uceFault_regexp_m_literal_replace'))
   1357 function rregexp_m_literal_replace(i) {
   1358    var re = /^str\d+9/m;
   1359    re.test("abc\nstr00123456789");
   1360    assertEq(re.lastIndex == 0, true);
   1361 
   1362    var res = "abc\nstr00123456789".replace(re, "abc");
   1363 
   1364    assertEq(re.lastIndex == 0, true);
   1365 
   1366    if (uceFault_regexp_m_literal_replace(i) || uceFault_regexp_m_literal_replace(i))
   1367        assertEq(res, "abc\nabc");
   1368    assertRecoveredOnBailout(res, false);
   1369    return i;
   1370 }
   1371 
   1372 var uceFault_string_replace = eval(`(${uceFault})`.replace('uceFault', 'uceFault_string_replace'))
   1373 function rstring_replace(i) {
   1374    var re = /str\d+9/;
   1375 
   1376    assertEq(re.lastIndex == 0, true);
   1377    var res = "str00123456789".replace(re, "abc");
   1378    if (uceFault_string_replace(i) || uceFault_string_replace(i))
   1379        assertEq(res, "abc");
   1380    assertRecoveredOnBailout(res, false);
   1381    assertEq(re.lastIndex == 0, true);
   1382    return i;
   1383 }
   1384 
   1385 var uceFault_string_replace_y = eval(`(${uceFault})`.replace('uceFault', 'uceFault_string_replace_y'))
   1386 function rstring_replace_y(i) {
   1387    var re = /str\d+9/y;
   1388 
   1389    assertEq(re.lastIndex == 0, true);
   1390    var res = "str00123456789".replace(re, "abc");
   1391    if (uceFault_string_replace_y(i) || uceFault_string_replace_y(i))
   1392        assertEq(res, "abc");
   1393    assertRecoveredOnBailout(res, false);
   1394    assertEq(re.lastIndex == 0, false);
   1395    return i;
   1396 }
   1397 
   1398 var uceFault_string_replace_g = eval(`(${uceFault})`.replace('uceFault', 'uceFault_string_replace_g'))
   1399 function rstring_replace_g(i) {
   1400    var re = /str\d+9/g;
   1401 
   1402    assertEq(re.lastIndex == 0, true);
   1403    var res = "str00123456789str00123456789".replace(re, "abc");
   1404    if (uceFault_string_replace_g(i) || uceFault_string_replace_g(i))
   1405        assertEq(res, "abcabc");
   1406    assertRecoveredOnBailout(res, false);
   1407    assertEq(re.lastIndex == 0, true);
   1408    return i;
   1409 }
   1410 
   1411 var uceFault_string_slice = eval(`(${uceFault})`.replace('uceFault', 'uceFault_string_slice'))
   1412 function rstring_slice(i) {
   1413    var res = "str00123456789".slice(0, 3);
   1414    if (uceFault_string_slice(i) || uceFault_string_slice(i))
   1415        assertEq(res, "str");
   1416    assertRecoveredOnBailout(res, false);
   1417    return i;
   1418 }
   1419 
   1420 var uceFault_string_substring = eval(`(${uceFault})`.replace('uceFault', 'uceFault_string_substring'))
   1421 function rstring_substring(i) {
   1422    var res = "str00123456789".substring(0, 3);
   1423    if (uceFault_string_substring(i) || uceFault_string_substring(i))
   1424        assertEq(res, "str");
   1425    assertRecoveredOnBailout(res, false);
   1426    return i;
   1427 }
   1428 
   1429 var uceFault_typeof = eval(`(${uceFault})`.replace('uceFault', 'uceFault_typeof'))
   1430 function rtypeof(i) {
   1431    var inputs = [ {}, [], 1, true, undefined, function(){}, null, Symbol() ];
   1432    var types = [ "object", "object", "number", "boolean", "undefined", "function", "object", "symbol"];
   1433 
   1434    var x = typeof (inputs[i % inputs.length]);
   1435    var y = types[i % types.length];
   1436 
   1437    if (uceFault_typeof(i) || uceFault_typeof(i))
   1438        assertEq(x, y);
   1439    assertRecoveredOnBailout(x, true);
   1440    return i;
   1441 }
   1442 
   1443 var uceFault_todouble_value = eval(`(${uceFault})`.replace('uceFault', 'uceFault_todouble_value'))
   1444 function rtodouble_value(i) {
   1445    var a = 1;
   1446    if (i == 1000) a = "1";
   1447 
   1448    var x = a < 8.1;
   1449 
   1450    if (uceFault_todouble_value(i) || uceFault_todouble_value(i))
   1451        assertEq(x, true);
   1452    assertRecoveredOnBailout(x, true);
   1453    return i;
   1454 }
   1455 
   1456 var uceFault_todouble_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_todouble_number'));
   1457 function rtodouble_number(i) {
   1458    var x = Math.fround(Math.fround(i) + Math.fround(i)) + 1;
   1459    if (uceFault_todouble_number(i) || uceFault_todouble_number(i))
   1460        assertEq(2 * i + 1, x);
   1461    assertRecoveredOnBailout(x, true);
   1462    return i;
   1463 }
   1464 
   1465 var uceFault_tofloat32_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_tofloat32_number'));
   1466 function rtofloat32_number(i) {
   1467    var x = Math.fround(i + 0.1111111111);
   1468    if (uceFault_tofloat32_number(i) || uceFault_tofloat32_number(i))
   1469        assertEq(x, Math.fround(99.1111111111));
   1470    assertRecoveredOnBailout(x, true);
   1471    return i;
   1472 }
   1473 
   1474 var uceFault_tofloat32_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_tofloat32_object'));
   1475 function rtofloat32_object(i) {
   1476    var t = i + 0.1111111111;
   1477    var o = { valueOf: function () { return t; } };
   1478    var x = Math.fround(o);
   1479    t = 1000.1111111111;
   1480    if (uceFault_tofloat32_object(i) || uceFault_tofloat32_object(i))
   1481        assertEq(x, Math.fround(99.1111111111));
   1482    assertRecoveredOnBailout(x, false);
   1483    return i;
   1484 }
   1485 
   1486 var uceFault_tofloat16_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_tofloat16_number'));
   1487 function rtofloat16_number(i) {
   1488    var x = Math.f16round(i + 0.22);
   1489    if (uceFault_tofloat16_number(i) || uceFault_tofloat16_number(i))
   1490        assertEq(x, Math.f16round(99.22));
   1491    assertRecoveredOnBailout(x, true);
   1492    return i;
   1493 }
   1494 
   1495 var uceFault_tofloat16_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_tofloat16_object'));
   1496 function rtofloat16_object(i) {
   1497    var t = i + 0.22;
   1498    var o = { valueOf: function () { return t; } };
   1499    var x = Math.f16round(o);
   1500    t = 1000.22;
   1501    if (uceFault_tofloat16_object(i) || uceFault_tofloat16_object(i))
   1502        assertEq(x, Math.f16round(99.22));
   1503    assertRecoveredOnBailout(x, false);
   1504    return i;
   1505 }
   1506 
   1507 var uceFault_trunc_to_int32_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_trunc_to_int32_number'));
   1508 function rtrunc_to_int32_number(i) {
   1509    var x = (i + 0.12) | 0;
   1510    if (uceFault_trunc_to_int32_number(i) || uceFault_trunc_to_int32_number(i))
   1511        assertEq(x, (i + 0.12) | 0);
   1512    assertRecoveredOnBailout(x, true);
   1513    return i;
   1514 }
   1515 
   1516 var uceFault_trunc_to_int32_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_trunc_to_int32_object'));
   1517 function rtrunc_to_int32_object(i) {
   1518    var t1 = i + 0.12;
   1519    var o1 = { valueOf: function() { return t1; } };
   1520    var x = o1 | 0;
   1521    t1 = 777.12;
   1522    if (uceFault_trunc_to_int32_object(i) || uceFault_trunc_to_int32_object(i))
   1523        assertEq(x, (i + 0.12) | 0);
   1524    assertRecoveredOnBailout(x, false);
   1525 }
   1526 
   1527 var uceFault_trunc_to_int32_string = eval(`(${uceFault})`.replace('uceFault', 'uceFault_trunc_to_int32_string'));
   1528 function rtrunc_to_int32_string(i) {
   1529    var x = (i + "0") | 0;
   1530    if (uceFault_trunc_to_int32_string(i) || uceFault_trunc_to_int32_string(i))
   1531        assertEq(x, (i + "0") | 0);
   1532    assertRecoveredOnBailout(x, true);
   1533    return i;
   1534 }
   1535 
   1536 var uceFault_hypot_number_2args = eval(`(${uceFault})`.replace('uceFault', 'uceFault_hypot_number_2args'));
   1537 function rhypot_number_2args(i) {
   1538    var x = Math.hypot(i, i + 1);
   1539    if (uceFault_hypot_number_2args(i) || uceFault_hypot_number_2args(i))
   1540        assertEq(x, Math.sqrt(i * i + (i + 1) * (i + 1)));
   1541    assertRecoveredOnBailout(x, true);
   1542    return i;
   1543 }
   1544 
   1545 var uceFault_hypot_number_3args = eval(`(${uceFault})`.replace('uceFault', 'uceFault_hypot_number_3args'));
   1546 function rhypot_number_3args(i) {
   1547    var x = Math.hypot(i, i + 1, i + 2);
   1548    if (uceFault_hypot_number_3args(i) || uceFault_hypot_number_3args(i))
   1549        assertEq(x, Math.sqrt(i * i + (i + 1) * (i + 1) + (i + 2) * (i + 2)));
   1550    assertRecoveredOnBailout(x, true);
   1551    return i;
   1552 }
   1553 
   1554 var uceFault_hypot_number_4args = eval(`(${uceFault})`.replace('uceFault', 'uceFault_hypot_number_4args'));
   1555 function rhypot_number_4args(i) {
   1556    var x = Math.hypot(i, i + 1, i + 2, i + 3);
   1557    if (uceFault_hypot_number_4args(i) || uceFault_hypot_number_4args(i))
   1558        assertEq(x, Math.sqrt(i * i + (i + 1) * (i + 1) + (i + 2) * (i + 2) + (i + 3) * (i + 3)));
   1559    assertRecoveredOnBailout(x, true);
   1560    return i;
   1561 }
   1562 
   1563 var uceFault_hypot_object_2args = eval(`(${uceFault})`.replace('uceFault', 'uceFault_hypot_object_2args'));
   1564 function rhypot_object_2args(i) {
   1565    var t0 = i;
   1566    var t1 = i + 1;
   1567    var o0 = { valueOf: function () { return t0; } };
   1568    var o1 = { valueOf: function () { return t1; } };
   1569    var x = Math.hypot(o0, o1);
   1570    t0 = 1000;
   1571    t1 = 2000;
   1572    if (uceFault_hypot_object_2args(i) || uceFault_hypot_object_2args(i) )
   1573        assertEq(x, Math.sqrt(i * i + (i + 1) * (i + 1)));
   1574    assertRecoveredOnBailout(x, false);
   1575    return i;
   1576 }
   1577 
   1578 var uceFault_hypot_object_3args = eval(`(${uceFault})`.replace('uceFault', 'uceFault_hypot_object_3args'));
   1579 function rhypot_object_3args(i) {
   1580    var t0 = i;
   1581    var t1 = i + 1;
   1582    var t2 = i + 2;
   1583    var o0 = { valueOf: function () { return t0; } };
   1584    var o1 = { valueOf: function () { return t1; } };
   1585    var o2 = { valueOf: function () { return t2; } };
   1586    var x = Math.hypot(o0, o1, o2);
   1587    t0 = 1000;
   1588    t1 = 2000;
   1589    t2 = 3000;
   1590    if (uceFault_hypot_object_3args(i) || uceFault_hypot_object_3args(i) )
   1591        assertEq(x, Math.sqrt(i * i + (i + 1) * (i + 1) + (i + 2) * (i + 2)));
   1592    assertRecoveredOnBailout(x, false);
   1593    return i;
   1594 }
   1595 
   1596 var uceFault_hypot_object_4args = eval(`(${uceFault})`.replace('uceFault', 'uceFault_hypot_object_4args'));
   1597 function rhypot_object_4args(i) {
   1598    var t0 = i;
   1599    var t1 = i + 1;
   1600    var t2 = i + 2;
   1601    var t3 = i + 3;
   1602    var o0 = { valueOf: function () { return t0; } };
   1603    var o1 = { valueOf: function () { return t1; } };
   1604    var o2 = { valueOf: function () { return t2; } };
   1605    var o3 = { valueOf: function () { return t3; } };
   1606    var x = Math.hypot(o0, o1, o2, o3);
   1607    t0 = 1000;
   1608    t1 = 2000;
   1609    t2 = 3000;
   1610    t3 = 4000;
   1611    if (uceFault_hypot_object_4args(i) || uceFault_hypot_object_4args(i) )
   1612        assertEq(x, Math.sqrt(i * i + (i + 1) * (i + 1) + (i + 2) * (i + 2) + (i + 3) * (i + 3)));
   1613    assertRecoveredOnBailout(x, false);
   1614    return i;
   1615 }
   1616 
   1617 var uceFault_random = eval(`(${uceFault})`.replace('uceFault', 'uceFault_random'));
   1618 function rrandom(i) {
   1619    // setRNGState() exists only in debug builds
   1620    if (getBuildConfiguration("debug")) setRNGState(2, 1+i);
   1621 
   1622    var x = Math.random();
   1623    if (uceFault_random(i) || uceFault_random(i)) {
   1624      // TODO(Warp): Conditional operator ?: prevents recovering operands.
   1625      // assertEq(x, getBuildConfiguration("debug") ? setRNGState(2, 1+i) || Math.random() : x);
   1626      if (getBuildConfiguration("debug")) {
   1627        assertEq(x, setRNGState(2, 1+i) || Math.random());
   1628      } else {
   1629        assertEq(x, x);
   1630      }
   1631    }
   1632    assertRecoveredOnBailout(x, true);
   1633    return i;
   1634 }
   1635 
   1636 var uceFault_sin_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sin_number'));
   1637 function rsin_number(i) {
   1638    var x = Math.sin(i);
   1639    if (uceFault_sin_number(i) || uceFault_sin_number(i))
   1640        assertEq(x, Math.sin(i));
   1641    assertRecoveredOnBailout(x, true);
   1642    return i;
   1643 }
   1644 
   1645 var uceFault_sin_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sin_object'));
   1646 function rsin_object(i) {
   1647    var t = i;
   1648    var o = { valueOf: function() { return t; } };
   1649    var x = Math.sin(o);
   1650    t = 777;
   1651    if (uceFault_sin_object(i) || uceFault_sin_object(i))
   1652        assertEq(x, Math.sin(i));
   1653    assertRecoveredOnBailout(x, false);
   1654    return i;
   1655 }
   1656 
   1657 var uceFault_log_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_log_number'));
   1658 function rlog_number(i) {
   1659    var x = Math.log(i);
   1660    if (uceFault_log_number(i) || uceFault_log_number(i))
   1661        assertEq(x, Math.log(99) /* log(99) */);
   1662    assertRecoveredOnBailout(x, true);
   1663    return i;
   1664 }
   1665 
   1666 var uceFault_log_object = eval(`(${uceFault})`.replace('uceFault', 'uceFault_log_object'));
   1667 function rlog_object(i) {
   1668    var t = i;
   1669    var o = { valueOf: function() { return t; } };
   1670    var x = Math.log(o); /* Evaluated with t == i, not t == 1000 */
   1671    t = 1000;
   1672    if (uceFault_log_object(i) || uceFault_log_object(i))
   1673        assertEq(x, Math.log(99) /* log(99) */);
   1674    assertRecoveredOnBailout(x, false);
   1675    return i;
   1676 }
   1677 
   1678 var uceFault_cos_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_cos_number'));
   1679 function rcos_number(i) {
   1680    var x = Math.cos(i);
   1681    if (uceFault_cos_number(i) || uceFault_cos_number(i))
   1682        assertEq(x, Math.cos(99));
   1683    assertRecoveredOnBailout(x, true);
   1684    return i;
   1685 }
   1686 
   1687 var uceFault_tan_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_tan_number'));
   1688 function rtan_number(i) {
   1689    var x = Math.tan(i);
   1690    if (uceFault_tan_number(i) || uceFault_tan_number(i))
   1691        assertEq(x, Math.tan(99));
   1692    assertRecoveredOnBailout(x, true);
   1693    return i;
   1694 }
   1695 
   1696 var uceFault_exp_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_exp_number'));
   1697 function rexp_number(i) {
   1698    var x = Math.exp(i);
   1699    if (uceFault_exp_number(i) || uceFault_exp_number(i))
   1700        assertEq(x, Math.exp(99));
   1701    assertRecoveredOnBailout(x, true);
   1702    return i;
   1703 }
   1704 
   1705 var uceFault_acos_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_acos_number'));
   1706 function racos_number(i) {
   1707    var x = Math.acos(1 / i);
   1708    if (uceFault_acos_number(i) || uceFault_acos_number(i))
   1709        assertEq(x, Math.acos(1 / 99));
   1710    assertRecoveredOnBailout(x, true);
   1711    return i;
   1712 }
   1713 
   1714 var uceFault_asin_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_asin_number'));
   1715 function rasin_number(i) {
   1716    var x = Math.asin(1 / i);
   1717    if (uceFault_asin_number(i) || uceFault_asin_number(i))
   1718        assertEq(x, Math.asin(1 / 99));
   1719    assertRecoveredOnBailout(x, true);
   1720    return i;
   1721 }
   1722 
   1723 var uceFault_atan_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_atan_number'));
   1724 function ratan_number(i) {
   1725    var x = Math.atan(i);
   1726    if (uceFault_atan_number(i) || uceFault_atan_number(i))
   1727        assertEq(x, Math.atan(99));
   1728    assertRecoveredOnBailout(x, true);
   1729    return i;
   1730 }
   1731 
   1732 var uceFault_log10_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_log10_number'));
   1733 function rlog10_number(i) {
   1734    var x = Math.log10(i);
   1735    if (uceFault_log10_number(i) || uceFault_log10_number(i))
   1736        assertEq(x, Math.log10(99));
   1737    assertRecoveredOnBailout(x, true);
   1738    return i;
   1739 }
   1740 
   1741 var uceFault_log2_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_log2_number'));
   1742 function rlog2_number(i) {
   1743    var x = Math.log2(i);
   1744    if (uceFault_log2_number(i) || uceFault_log2_number(i))
   1745        assertEq(x, Math.log2(99));
   1746    assertRecoveredOnBailout(x, true);
   1747    return i;
   1748 }
   1749 
   1750 var uceFault_log1p_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_log1p_number'));
   1751 function rlog1p_number(i) {
   1752    var x = Math.log1p(i);
   1753    if (uceFault_log1p_number(i) || uceFault_log1p_number(i))
   1754        assertEq(x, Math.log1p(99));
   1755    assertRecoveredOnBailout(x, true);
   1756    return i;
   1757 }
   1758 
   1759 var uceFault_expm1_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_expm1_number'));
   1760 function rexpm1_number(i) {
   1761    var x = Math.expm1(i);
   1762    if (uceFault_expm1_number(i) || uceFault_expm1_number(i))
   1763        assertEq(x, Math.expm1(99));
   1764    assertRecoveredOnBailout(x, true);
   1765    return i;
   1766 }
   1767 
   1768 var uceFault_cosh_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_cosh_number'));
   1769 function rcosh_number(i) {
   1770    var x = Math.cosh(i);
   1771    if (uceFault_cosh_number(i) || uceFault_cosh_number(i))
   1772        assertEq(x, Math.cosh(99));
   1773    assertRecoveredOnBailout(x, true);
   1774    return i;
   1775 }
   1776 
   1777 var uceFault_sinh_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sinh_number'));
   1778 function rsinh_number(i) {
   1779    var x = Math.sinh(i);
   1780    if (uceFault_sinh_number(i) || uceFault_sinh_number(i))
   1781        assertEq(x, Math.sinh(99));
   1782    assertRecoveredOnBailout(x, true);
   1783    return i;
   1784 }
   1785 
   1786 var uceFault_tanh_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_tanh_number'));
   1787 function rtanh_number(i) {
   1788    var x = Math.tanh(1 / i);
   1789    if (uceFault_tanh_number(i) || uceFault_tanh_number(i))
   1790        assertEq(x, Math.tanh(1 / 99));
   1791    assertRecoveredOnBailout(x, true);
   1792    return i;
   1793 }
   1794 
   1795 var uceFault_acosh_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_acosh_number'));
   1796 function racosh_number(i) {
   1797    var x = Math.acosh(i);
   1798    if (uceFault_acosh_number(i) || uceFault_acosh_number(i))
   1799        assertEq(x, Math.acosh(99));
   1800    assertRecoveredOnBailout(x, true);
   1801    return i;
   1802 }
   1803 
   1804 var uceFault_asinh_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_asinh_number'));
   1805 function rasinh_number(i) {
   1806    var x = Math.asinh(i);
   1807    if (uceFault_asinh_number(i) || uceFault_asinh_number(i))
   1808        assertEq(x, Math.asinh(99));
   1809    assertRecoveredOnBailout(x, true);
   1810    return i;
   1811 }
   1812 
   1813 var uceFault_atanh_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_atanh_number'));
   1814 function ratanh_number(i) {
   1815    var x = Math.atanh(1 / i);
   1816    if (uceFault_atanh_number(i) || uceFault_atanh_number(i))
   1817        assertEq(x, Math.atanh(1 / 99));
   1818    assertRecoveredOnBailout(x, true);
   1819    return i;
   1820 }
   1821 
   1822 var uceFault_cbrt_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_cbrt_number'));
   1823 function rcbrt_number(i) {
   1824    var x = Math.cbrt(i);
   1825    if (uceFault_cbrt_number(i) || uceFault_cbrt_number(i))
   1826        assertEq(x, Math.cbrt(99));
   1827    assertRecoveredOnBailout(x, true);
   1828    return i;
   1829 }
   1830 
   1831 var uceFault_sign_number = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sign_number'));
   1832 function rsign_number(i) {
   1833    var x = Math.sign(-i - 0.12010799100);
   1834    if (uceFault_sign_number(i) || uceFault_sign_number(i))
   1835        assertEq(x, Math.sign(-10));
   1836    assertRecoveredOnBailout(x, true);
   1837    return i;
   1838 }
   1839 
   1840 let uceFault_sign_double = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sign_double'));
   1841 function rsign_double(i) {
   1842    const x = Math.sign(i + (-1 >>> 0));
   1843    if (uceFault_sign_double(i) || uceFault_sign_double(i))
   1844        assertEq(x, Math.sign(10));
   1845    assertRecoveredOnBailout(x, true);
   1846    return i;
   1847 }
   1848 
   1849 let uceFault_add_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_add_bigint'));
   1850 function rbigintadd(i) {
   1851    var x = 1n + i;
   1852    if (uceFault_add_bigint(i) || uceFault_add_bigint(i))
   1853        assertEq(x, 100n  /* = 1 + 99 */);
   1854    assertRecoveredOnBailout(x, true);
   1855    return i;
   1856 }
   1857 
   1858 let uceFault_sub_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_sub_bigint'));
   1859 function rbigintsub(i) {
   1860    var x = 1n - i;
   1861    if (uceFault_sub_bigint(i) || uceFault_sub_bigint(i))
   1862        assertEq(x, -98n  /* = 1 - 99 */);
   1863    assertRecoveredOnBailout(x, true);
   1864    return i;
   1865 }
   1866 
   1867 let uceFault_mul_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_mul_bigint'));
   1868 function rbigintmul(i) {
   1869    var x = 2n * i;
   1870    if (uceFault_mul_bigint(i) || uceFault_mul_bigint(i))
   1871        assertEq(x, 198n  /* = 2 * 99 */);
   1872    assertRecoveredOnBailout(x, true);
   1873    return i;
   1874 }
   1875 
   1876 let uceFault_div_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_div_bigint'));
   1877 function rbigintdiv(i) {
   1878    var x = i / 3n;
   1879    if (uceFault_div_bigint(i) || uceFault_div_bigint(i))
   1880        assertEq(x, 33n  /* = 99 / 3 */);
   1881    assertRecoveredOnBailout(x, true);
   1882    return i;
   1883 }
   1884 
   1885 let uceFault_mod_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_mod_bigint'));
   1886 function rbigintmod(i) {
   1887    var x = i % 2n;
   1888    if (uceFault_mod_bigint(i) || uceFault_mod_bigint(i))
   1889        assertEq(x, 1n  /* = 99 % 2 */);
   1890    assertRecoveredOnBailout(x, true);
   1891    return i;
   1892 }
   1893 
   1894 let uceFault_pow_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_pow_bigint'));
   1895 function rbigintpow(i) {
   1896    var x = i ** 5n;
   1897    if (uceFault_pow_bigint(i) || uceFault_pow_bigint(i))
   1898        assertEq(x, 9509900499n  /* = 99 ** 5 */);
   1899    assertRecoveredOnBailout(x, true);
   1900    return i;
   1901 }
   1902 
   1903 let uceFault_inc_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_inc_bigint'));
   1904 function rbigintinc(i) {
   1905    var x = i;
   1906    x++;
   1907    if (uceFault_inc_bigint(i) || uceFault_inc_bigint(i))
   1908        assertEq(x, 100n  /* = 99 + 1 */);
   1909    assertRecoveredOnBailout(x, true);
   1910    return i;
   1911 }
   1912 
   1913 let uceFault_dec_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_dec_bigint'));
   1914 function rbigintdec(i) {
   1915    var x = i;
   1916    x--;
   1917    if (uceFault_dec_bigint(i) || uceFault_dec_bigint(i))
   1918        assertEq(x, 98n  /* = 99 - 1 */);
   1919    assertRecoveredOnBailout(x, true);
   1920    return i;
   1921 }
   1922 
   1923 let uceFault_neg_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_neg_bigint'));
   1924 function rbigintneg(i) {
   1925    var x = -i;
   1926    if (uceFault_neg_bigint(i) || uceFault_neg_bigint(i))
   1927        assertEq(x, -99n);
   1928    assertRecoveredOnBailout(x, true);
   1929    return i;
   1930 }
   1931 
   1932 let uceFault_bitand_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitand_bigint'));
   1933 function rbigintbitand(i) {
   1934    var x = 1n & i;
   1935    if (uceFault_bitand_bigint(i) || uceFault_bitand_bigint(i))
   1936        assertEq(x, 1n  /* = 1 & 99 */);
   1937    assertRecoveredOnBailout(x, true);
   1938    return i;
   1939 }
   1940 
   1941 let uceFault_bitor_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitor_bigint'));
   1942 function rbigintbitor(i) {
   1943    var x = i | -100n; /* -100 == ~99 */
   1944    if (uceFault_bitor_bigint(i) || uceFault_bitor_bigint(i))
   1945        assertEq(x, -1n) /* ~99 | 99 = -1 */
   1946    assertRecoveredOnBailout(x, true);
   1947    return i;
   1948 }
   1949 
   1950 let uceFault_bitxor_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitxor_bigint'));
   1951 function rbigintbitxor(i) {
   1952    var x = 1n ^ i;
   1953    if (uceFault_bitxor_bigint(i) || uceFault_bitxor_bigint(i))
   1954        assertEq(x, 98n  /* = 1 XOR 99 */);
   1955    assertRecoveredOnBailout(x, true);
   1956    return i;
   1957 }
   1958 
   1959 let uceFault_bitnot_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bitnot_bigint'));
   1960 function rbigintbitnot(i) {
   1961    var x = ~i;
   1962    if (uceFault_bitnot_bigint(i) || uceFault_bitnot_bigint(i))
   1963        assertEq(x, -100n  /* = ~99 */);
   1964    assertRecoveredOnBailout(x, true);
   1965    return i;
   1966 }
   1967 
   1968 let uceFault_lsh_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_lsh_bigint'));
   1969 function rbigintlsh(i) {
   1970    var x = i << 1n;
   1971    if (uceFault_lsh_bigint(i) || uceFault_lsh_bigint(i))
   1972        assertEq(x, 198n); /* 99 << 1 == 198 */
   1973    assertRecoveredOnBailout(x, true);
   1974    return i;
   1975 }
   1976 
   1977 let uceFault_rsh_bigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_rsh_bigint'));
   1978 function rbigintrsh(i) {
   1979    var x = i >> 1n;
   1980    if (uceFault_rsh_bigint(i) || uceFault_rsh_bigint(i))
   1981        assertEq(x, 49n  /* = 99 >> 1 */);
   1982    assertRecoveredOnBailout(x, true);
   1983    return i;
   1984 }
   1985 
   1986 let uceFault_bigintasint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bigintasint'));
   1987 function rbigintasint(i) {
   1988    var x = BigInt.asIntN(6, i);
   1989    if (uceFault_bigintasint(i) || uceFault_bigintasint(i))
   1990        assertEq(x, -29n);
   1991    assertRecoveredOnBailout(x, true);
   1992    return i;
   1993 }
   1994 
   1995 let uceFault_bigintasuint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_bigintasuint'));
   1996 function rbigintasuint(i) {
   1997    var x = BigInt.asUintN(6, i);
   1998    if (uceFault_bigintasuint(i) || uceFault_bigintasuint(i))
   1999        assertEq(x, 35n);
   2000    assertRecoveredOnBailout(x, true);
   2001    return i;
   2002 }
   2003 
   2004 let uceFault_int32tobigint = eval(`(${uceFault})`.replace('uceFault', 'uceFault_int32tobigint'));
   2005 function rint32tobigint(i) {
   2006    var x = BigInt(i);
   2007    if (uceFault_int32tobigint(i) || uceFault_int32tobigint(i))
   2008        assertEq(x, 99n);
   2009    assertRecoveredOnBailout(x, true);
   2010    return i;
   2011 }
   2012 
   2013 let uceFault_int32tobigint_nonnegative = eval(`(${uceFault})`.replace('uceFault', 'uceFault_int32tobigint_nonnegative'));
   2014 function rint32tobigint_nonnegative(i) {
   2015    i = Math.max(i, 0);
   2016    var x = BigInt(i);
   2017    if (uceFault_int32tobigint_nonnegative(i) || uceFault_int32tobigint_nonnegative(i))
   2018        assertEq(x, 99n);
   2019    assertRecoveredOnBailout(x, true);
   2020    return i;
   2021 }
   2022 
   2023 let uceFault_nantozero_nan = eval(`(${uceFault})`.replace('uceFault', 'uceFault_nantozero_nan'));
   2024 function rnantozero_nan(i) {
   2025    // Note: |x| must be Double-typed.
   2026    var x = NaN ** (i + 0.5);
   2027    var y = x ? x : +0;
   2028    if (uceFault_nantozero_nan(i) || uceFault_nantozero_nan(i))
   2029        assertEq(y, +0);
   2030    assertRecoveredOnBailout(y, true);
   2031    return i;
   2032 }
   2033 
   2034 let uceFault_nantozero_poszero = eval(`(${uceFault})`.replace('uceFault', 'uceFault_nantozero_poszero'));
   2035 function rnantozero_poszero(i) {
   2036    // Note: |x| must be Double-typed.
   2037    var x = (i + 0.5) * +0;
   2038    var y = x ? x : +0;
   2039    if (uceFault_nantozero_poszero(i) || uceFault_nantozero_poszero(i))
   2040        assertEq(y, +0);
   2041    assertRecoveredOnBailout(y, true);
   2042    return i;
   2043 }
   2044 
   2045 let uceFault_nantozero_negzero = eval(`(${uceFault})`.replace('uceFault', 'uceFault_nantozero_negzero'));
   2046 function rnantozero_negzero(i) {
   2047    // Note: |x| must be Double-typed.
   2048    var x = (i + 0.5) * -0;
   2049    var y = x ? x : +0;
   2050    if (uceFault_nantozero_negzero(i) || uceFault_nantozero_negzero(i))
   2051        assertEq(y, +0);
   2052    assertRecoveredOnBailout(y, true);
   2053    return i;
   2054 }
   2055 
   2056 let uceFault_ratomicsislockfree_true = eval(`(${uceFault})`.replace('uceFault', 'uceFault_ratomicsislockfree_true'));
   2057 function ratomicsislockfree_true(i) {
   2058    var x = [1, 2, 4, 8][i & 3];
   2059    var y = Atomics.isLockFree(x);
   2060    if (uceFault_ratomicsislockfree_true(i) || uceFault_ratomicsislockfree_true(i))
   2061        assertEq(y, true);
   2062    assertRecoveredOnBailout(y, true);
   2063    return i;
   2064 }
   2065 
   2066 let uceFault_ratomicsislockfree_false = eval(`(${uceFault})`.replace('uceFault', 'uceFault_ratomicsislockfree_false'));
   2067 function ratomicsislockfree_false(i) {
   2068    var x = [-1, 0, 3, 1000][i & 3];
   2069    var y = Atomics.isLockFree(x);
   2070    if (uceFault_ratomicsislockfree_false(i) || uceFault_ratomicsislockfree_false(i))
   2071        assertEq(y, false);
   2072    assertRecoveredOnBailout(y, true);
   2073    return i;
   2074 }
   2075 
   2076 let uceFault_rstrictconstantcompareint32_eq = eval(`(${uceFault})`.replace('uceFault', 'uceFault_rstrictconstantcompareint32_eq'));
   2077 function rstrictconstantcompareint32_eq(i) {
   2078    var x = i === 0;
   2079    if (uceFault_rstrictconstantcompareint32_eq(i) || uceFault_rstrictconstantcompareint32_eq(i))
   2080        assertEq(x, false /* = 0 === 99 */);
   2081    assertRecoveredOnBailout(x, true);
   2082    return i;
   2083 }
   2084 
   2085 let uceFault_rstrictconstantcompareint32_ne = eval(`(${uceFault})`.replace('uceFault', 'uceFault_rstrictconstantcompareint32_ne'));
   2086 function rstrictconstantcompareint32_ne(i) {
   2087    var x = i !== 0;
   2088    if (uceFault_rstrictconstantcompareint32_ne(i) || uceFault_rstrictconstantcompareint32_ne(i))
   2089        assertEq(x, true /* = 0 !== 99 */);
   2090    assertRecoveredOnBailout(x, true);
   2091    return i;
   2092 }
   2093 
   2094 let uceFault_rstrictconstantcompareboolean_eq = eval(`(${uceFault})`.replace('uceFault', 'uceFault_rstrictconstantcompareboolean_eq'));
   2095 function rstrictconstantcompareboolean_eq(i) {
   2096    var value = [null, true][i & 1];
   2097    var x = value === true;
   2098    if (uceFault_rstrictconstantcompareboolean_eq(i) || uceFault_rstrictconstantcompareboolean_eq(i))
   2099        assertEq(x, true /* true === [null, true][99 & 1] */);
   2100    assertRecoveredOnBailout(x, true);
   2101    return i;
   2102 }
   2103 
   2104 let uceFault_rstrictconstantcompareboolean_ne = eval(`(${uceFault})`.replace('uceFault', 'uceFault_rstrictconstantcompareboolean_ne'));
   2105 function rstrictconstantcompareboolean_ne(i) {
   2106    var value = [null, true][i & 1];
   2107    var x = value !== true;
   2108    if (uceFault_rstrictconstantcompareboolean_ne(i) || uceFault_rstrictconstantcompareboolean_ne(i))
   2109        assertEq(x, false /* true === [null, true][99 & 1] */);
   2110    assertRecoveredOnBailout(x, true);
   2111    return i;
   2112 }
   2113 
   2114 for (j = 100 - max; j < 100; j++) {
   2115    with({}){} // Do not Ion-compile this loop.
   2116    let i = j < 2 ? (Math.abs(j) % 50) + 2 : j;
   2117    rbitnot_number(i);
   2118    rbitnot_object(i);
   2119    rbitand_number(i);
   2120    rbitand_object(i);
   2121    rbitor_number(i);
   2122    rbitor_object(i);
   2123    rbitxor_number(i);
   2124    rbitxor_object(i);
   2125    rlsh_number(i);
   2126    rlsh_object(i);
   2127    rrsh_number(i);
   2128    rrsh_object(i);
   2129    rursh_number(i);
   2130    rursh_object(i);
   2131    rsignextend8_1(i);
   2132    rsignextend8_2(i);
   2133    rsignextend16_1(i);
   2134    rsignextend16_2(i);
   2135    radd_number(i);
   2136    radd_float(i);
   2137    radd_object(i);
   2138    rsub_number(i);
   2139    rsub_float(i);
   2140    rsub_object(i);
   2141    rmul_number(i);
   2142    rmul_overflow(i);
   2143    rmul_float(i);
   2144    rmul_object(i);
   2145    rimul_number(i);
   2146    rimul_overflow(i);
   2147    rimul_object(i);
   2148    rdiv_number(i);
   2149    rdiv_double(i);
   2150    rdiv_float(i);
   2151    rdiv_object(i);
   2152    rmod_number(i);
   2153    rmod_object(i);
   2154    rnot_number(i);
   2155    rnot_object(i);
   2156    rnot_bigint_intptr(i);
   2157    rnot_bigint_int64(i);
   2158    rcompare_number_eq(i);
   2159    rcompare_number_stricteq(i);
   2160    rcompare_number_ne(i);
   2161    rcompare_number_stricteq(i);
   2162    rcompare_number_lt(i);
   2163    rcompare_number_le(i);
   2164    rcompare_number_gt(i);
   2165    rcompare_number_ge(i);
   2166    rcompare_string_eq(i);
   2167    rcompare_string_stricteq(i);
   2168    rcompare_string_ne(i);
   2169    rcompare_string_stricteq(i);
   2170    rcompare_string_lt(i);
   2171    rcompare_string_le(i);
   2172    rcompare_string_gt(i);
   2173    rcompare_string_ge(i);
   2174    rcompare_bigint_eq(i, BigInt(i));
   2175    rcompare_bigint_stricteq(i, BigInt(i));
   2176    rcompare_bigint_ne(i, BigInt(i));
   2177    rcompare_bigint_stricteq(i, BigInt(i));
   2178    rcompare_bigint_lt(i, BigInt(i));
   2179    rcompare_bigint_le(i, BigInt(i));
   2180    rcompare_bigint_gt(i, BigInt(i));
   2181    rcompare_bigint_ge(i, BigInt(i));
   2182    rconcat_string(i);
   2183    rconcat_number(i);
   2184    rstring_length(i);
   2185    rarguments_length_1(i);
   2186    rarguments_length_3(i, 0, 1);
   2187    rinline_arguments_length_1(i);
   2188    rinline_arguments_length_3(i, 0, 1);
   2189    rfloor_number(i);
   2190    rfloor_double(i);
   2191    rfloor_object(i);
   2192    rceil_number(i);
   2193    rceil_double(i);
   2194    rround_number(i);
   2195    rround_double(i);
   2196    rtrunc_number(i);
   2197    rtrunc_double(i);
   2198    rcharCodeAt(i);
   2199    rfrom_char_code(i);
   2200    rfrom_char_code_non_ascii(i);
   2201    rpow_number(i);
   2202    rpow_object(i);
   2203    rpowhalf_number(i);
   2204    rpowhalf_object(i);
   2205    rmin_number(i);
   2206    rmin_float(i);
   2207    rmin_object(i);
   2208    rmax_number(i);
   2209    rmax_float(i);
   2210    rmax_object(i);
   2211    rabs_number(i);
   2212    rabs_object(i);
   2213    rsqrt_number(i);
   2214    rsqrt_float(i);
   2215    rsqrt_object(i);
   2216    ratan2_number(i);
   2217    ratan2_object(i);
   2218    if (!warp) {
   2219      // TODO(Warp): Warp doesn't currently support a compiler constraints like
   2220      // system to elide checks for modified built-ins. Additionally this test
   2221      // requires to inline the self-hosted function and to elide all type
   2222      // checks before the StringSplitString intrinsic is called.
   2223      rstr_split(i);
   2224    }
   2225    rregexp_exec(i);
   2226    rregexp_y_exec(i);
   2227    rregexp_y_literal_exec(i);
   2228    rregexp_g_exec(i);
   2229    rregexp_g_literal_exec(i);
   2230    rregexp_i_exec(i);
   2231    rregexp_i_literal_exec(i);
   2232    rregexp_m_exec(i);
   2233    rregexp_m_literal_exec(i);
   2234    rregexp_test(i);
   2235    rregexp_y_test(i);
   2236    rregexp_y_literal_test(i);
   2237    rregexp_g_test(i);
   2238    rregexp_g_literal_test(i);
   2239    rregexp_i_test(i);
   2240    rregexp_i_literal_test(i);
   2241    rregexp_m_test(i);
   2242    rregexp_m_literal_test(i);
   2243    rregexp_replace(i);
   2244    rregexp_y_replace(i);
   2245    rregexp_y_literal_replace(i);
   2246    rregexp_g_replace(i);
   2247    rregexp_g_literal_replace(i);
   2248    rregexp_i_replace(i);
   2249    rregexp_i_literal_replace(i);
   2250    rregexp_m_replace(i);
   2251    rregexp_m_literal_replace(i);
   2252    rstring_replace(i);
   2253    rstring_replace_y(i);
   2254    rstring_replace_g(i);
   2255    rstring_slice(i);
   2256    rstring_substring(i);
   2257    rtypeof(i);
   2258    rtodouble_value(i);
   2259    rtodouble_number(i);
   2260    rtofloat32_number(i);
   2261    rtofloat32_object(i);
   2262    rtofloat16_number(i);
   2263    rtofloat16_object(i);
   2264    rtrunc_to_int32_number(i);
   2265    rtrunc_to_int32_object(i);
   2266    if (!warp) {
   2267      // TODO(Warp): Bitwise operations on strings not optimised in Warp.
   2268      rtrunc_to_int32_string(i);
   2269    }
   2270    rhypot_number_2args(i);
   2271    rhypot_number_3args(i);
   2272    rhypot_number_4args(i);
   2273    rhypot_object_2args(i);
   2274    rhypot_object_3args(i);
   2275    rhypot_object_4args(i);
   2276    rrandom(i);
   2277    rsin_number(i);
   2278    rsin_object(i);
   2279    rlog_number(i);
   2280    rlog_object(i);
   2281    rcos_number(i);
   2282    rexp_number(i);
   2283    rtan_number(i);
   2284    racos_number(i);
   2285    rasin_number(i);
   2286    ratan_number(i);
   2287    rlog10_number(i);
   2288    rlog2_number(i);
   2289    rlog1p_number(i);
   2290    rexpm1_number(i);
   2291    rcosh_number(i);
   2292    rsinh_number(i);
   2293    rtanh_number(i);
   2294    racosh_number(i);
   2295    rasinh_number(i);
   2296    ratanh_number(i);
   2297    rcbrt_number(i);
   2298    rsign_number(i);
   2299    rsign_double(i);
   2300    rbigintadd(BigInt(i));
   2301    rbigintsub(BigInt(i));
   2302    rbigintmul(BigInt(i));
   2303    rbigintdiv(BigInt(i));
   2304    rbigintmod(BigInt(i));
   2305    rbigintpow(BigInt(i));
   2306    rbigintinc(BigInt(i));
   2307    rbigintdec(BigInt(i));
   2308    rbigintneg(BigInt(i));
   2309    rbigintbitand(BigInt(i));
   2310    rbigintbitor(BigInt(i));
   2311    rbigintbitxor(BigInt(i));
   2312    rbigintbitnot(BigInt(i));
   2313    rbigintlsh(BigInt(i));
   2314    rbigintrsh(BigInt(i));
   2315    rbigintasint(BigInt(i));
   2316    rbigintasuint(BigInt(i));
   2317    rint32tobigint(i);
   2318    rint32tobigint_nonnegative(i);
   2319    rnantozero_nan(i);
   2320    rnantozero_poszero(i);
   2321    rnantozero_negzero(i);
   2322    ratomicsislockfree_true(i);
   2323    ratomicsislockfree_false(i);
   2324    rstrictconstantcompareint32_eq(i);
   2325    rstrictconstantcompareint32_ne(i);
   2326    rstrictconstantcompareboolean_eq(i);
   2327    rstrictconstantcompareboolean_ne(i);
   2328 }
   2329 
   2330 // Test that we can refer multiple time to the same recover instruction, as well
   2331 // as chaining recover instructions.
   2332 
   2333 function alignedAlloc($size, $alignment) {
   2334    var $1 = $size + 4 | 0;
   2335    var $2 = $alignment - 1 | 0;
   2336    var $3 = $1 + $2 | 0;
   2337    var $4 = malloc($3);
   2338 }
   2339 
   2340 function malloc($bytes) {
   2341    var $189 = undefined;
   2342    var $198 = $189 + 8 | 0;
   2343 }
   2344 
   2345 for (i = 0; i < 50; i++)
   2346    alignedAlloc(608, 16);