tor-browser

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

stack-alignment.js (4446B)


      1 setJitCompilerOption("baseline.warmup.trigger", 10);
      2 setJitCompilerOption("ion.warmup.trigger", 30);
      3 var i;
      4 
      5 // Check that an entry frame is always aligned properly.
      6 function entryFrame_1() {
      7  assertJitStackInvariants();
      8 }
      9 
     10 // Check rectifier frames are keeping the same alignment.
     11 function rectifierFrame_verify(a, b, c, d) {
     12  assertJitStackInvariants();
     13 }
     14 
     15 function rectifierFrame_1(i) {
     16  rectifierFrame_verify();
     17 }
     18 function rectifierFrame_2(i) {
     19  rectifierFrame_verify(i);
     20 }
     21 function rectifierFrame_3(i) {
     22  rectifierFrame_verify(i, i);
     23 }
     24 function rectifierFrame_4(i) {
     25  rectifierFrame_verify(i, i, i);
     26 }
     27 
     28 // Check that an ion frame size is always aligned properly.
     29 function gen_ionFrameSize(x, y, name) {
     30  var locals = (new Array(x)).fill(0).map((v, i) => i);
     31  var args = (new Array(y)).fill(0).map((v, i) => i);
     32 
     33  return new Function("i",
     34    locals.map(i => "var l% = i + %;\n".replace(/%/g, i)).join("")
     35  + name + "(" + args.map(i => "l%".replace("%", i)).join(", ") + ");\n"
     36  + "return " + locals.map(i => "l%".replace("%", i)).join(" + ") + ";\n"
     37  );
     38 }
     39 
     40 var ionFrameSize_0 = gen_ionFrameSize(30, 0, "assertJitStackInvariants");
     41 var ionFrameSize_1 = gen_ionFrameSize(31, 0, "assertJitStackInvariants");
     42 var ionFrameSize_2 = gen_ionFrameSize(32, 0, "assertJitStackInvariants");
     43 var ionFrameSize_3 = gen_ionFrameSize(33, 0, "assertJitStackInvariants");
     44 
     45 function ionFrameSize_callee_verify(a, b, c, d) {
     46  assertJitStackInvariants();
     47 }
     48 
     49 var ionFrameSize_args = [];
     50 for (var l = 0; l < 4; l++) {
     51  ionFrameSize_args[l] = [];
     52  for (var a = 0; a < 4; a++)
     53    ionFrameSize_args[l][a] = gen_ionFrameSize(30 + l, a, "ionFrameSize_callee_verify");;
     54 }
     55 
     56 // Check ion frames during function apply calls with the argument vector.
     57 function ionFrame_funApply_0() {
     58  assertJitStackInvariants.apply(this, arguments);
     59 }
     60 function ionFrame_funApply_1() {
     61  ionFrame_funApply_0.apply(this, arguments);
     62 }
     63 
     64 // Check ion frames during function apply calls with an array of arguments.
     65 function ionFrame_funApply_2() {
     66  var arr = Array.apply(Array, arguments);
     67  assertJitStackInvariants.apply(this, arr);
     68 }
     69 function ionFrame_funApply_3() {
     70  var arr = Array.apply(Array, arguments);
     71  ionFrame_funApply_2.apply(this, arr);
     72 }
     73 
     74 // Check ion frames during function .call calls.
     75 function ionFrame_funCall_0() {
     76  assertJitStackInvariants.call(this);
     77 }
     78 function ionFrame_funCall_1(a) {
     79  assertJitStackInvariants.call(this, a);
     80 }
     81 function ionFrame_funCall_2(a, b) {
     82  assertJitStackInvariants.call(this, a, b);
     83 }
     84 function ionFrame_funCall_3(a, b, c) {
     85  assertJitStackInvariants.call(this, a, b, c);
     86 }
     87 
     88 function ionFrame_funCall_x0() {
     89  ionFrame_funCall_0.call(this);
     90 }
     91 function ionFrame_funCall_x1(a) {
     92  ionFrame_funCall_1.call(this, a);
     93 }
     94 function ionFrame_funCall_x2(a, b) {
     95  ionFrame_funCall_2.call(this, a, b);
     96 }
     97 function ionFrame_funCall_x3(a, b, c) {
     98  ionFrame_funCall_3.call(this, a, b, c);
     99 }
    100 
    101 // Check ion frames during spread calls.
    102 function ionFrame_spreadCall_0() {
    103  var arr = Array.apply(Array, arguments);
    104  assertJitStackInvariants(...arr);
    105 }
    106 function ionFrame_spreadCall_1() {
    107  var arr = Array.apply(Array, arguments);
    108  ionFrame_spreadCall_0(...arr);
    109 }
    110 
    111 
    112 for (i = 0; i < 40; i++) {
    113  entryFrame_1();
    114  entryFrame_1(0);
    115  entryFrame_1(0, 1);
    116 
    117  rectifierFrame_1(i);
    118  rectifierFrame_2(i);
    119  rectifierFrame_3(i);
    120  rectifierFrame_4(i);
    121 
    122  ionFrameSize_0(i);
    123  ionFrameSize_1(i);
    124  ionFrameSize_2(i);
    125  ionFrameSize_3(i);
    126 
    127  for (var l = 0; l < 4; l++)
    128    for (var a = 0; a < 4; a++)
    129      ionFrameSize_args[l][a](i);
    130 
    131  ionFrame_funApply_0();
    132  ionFrame_funApply_0(1);
    133  ionFrame_funApply_0(1, 2);
    134  ionFrame_funApply_0(1, 2, 3);
    135  ionFrame_funApply_1();
    136  ionFrame_funApply_1(1);
    137  ionFrame_funApply_1(1, 2);
    138  ionFrame_funApply_1(1, 2, 3);
    139 
    140  ionFrame_funApply_2();
    141  ionFrame_funApply_2(1);
    142  ionFrame_funApply_2(1, 2);
    143  ionFrame_funApply_2(1, 2, 3);
    144  ionFrame_funApply_3();
    145  ionFrame_funApply_3(1);
    146  ionFrame_funApply_3(1, 2);
    147  ionFrame_funApply_3(1, 2, 3);
    148 
    149  ionFrame_funCall_0();
    150  ionFrame_funCall_1(1);
    151  ionFrame_funCall_2(1, 2);
    152  ionFrame_funCall_3(1, 2, 3);
    153  ionFrame_funCall_x0();
    154  ionFrame_funCall_x1(1);
    155  ionFrame_funCall_x2(1, 2);
    156  ionFrame_funCall_x3(1, 2, 3);
    157 
    158  ionFrame_spreadCall_0();
    159  ionFrame_spreadCall_0(1);
    160  ionFrame_spreadCall_0(1, 2);
    161  ionFrame_spreadCall_0(1, 2, 3);
    162  ionFrame_spreadCall_1();
    163  ionFrame_spreadCall_1(1);
    164  ionFrame_spreadCall_1(1, 2);
    165  ionFrame_spreadCall_1(1, 2, 3);
    166 }