Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: test/cctest/interpreter/test-bytecode-generator.cc

Issue 1546683002: [Interpreter] Add support for jumps using constants with wide operands. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Tweak constant-array-builder-unittest.cc. Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/cctest/interpreter/test-bytecode-generator.cc
diff --git a/test/cctest/interpreter/test-bytecode-generator.cc b/test/cctest/interpreter/test-bytecode-generator.cc
index cbd689c1c77042374efd10ffe12f6c5992ffbac7..c0088396ee9144d2a2da4c3eaba23ab6efd8d20f 100644
--- a/test/cctest/interpreter/test-bytecode-generator.cc
+++ b/test/cctest/interpreter/test-bytecode-generator.cc
@@ -65,9 +65,12 @@ class BytecodeGeneratorHelper {
}
Handle<BytecodeArray> MakeBytecodeForFunctionBody(const char* body) {
- ScopedVector<char> program(3072);
- SNPrintF(program, "function %s() { %s }\n%s();", kFunctionName, body,
- kFunctionName);
+ static const char kFormat[] = "function %s() { %s }\n%s();";
+ static const int kFormatLength = arraysize(kFormat);
+ int length = kFormatLength + 2 * StrLength(kFunctionName) + StrLength(body);
+ ScopedVector<char> program(length);
+ length = SNPrintF(program, kFormat, kFunctionName, body, kFunctionName);
+ CHECK_GT(length, 0);
return MakeBytecode(program.start(), kFunctionName);
}
@@ -2630,6 +2633,218 @@ TEST(BasicLoops) {
}
+TEST(JumpsRequiringConstantWideOperands) {
+ InitializedHandleScope handle_scope;
+ BytecodeGeneratorHelper helper;
+ ExpectedSnippet<Handle<Object>, 315> snippets[] = {
+ {"var a = 'a0', b = 'b0', c = 'c0', d = 'd0', e = 'e0', _ = 'f0',\n"
+ " g = 'g0', h = 'h0', i = 'i0', j = 'j0', k = 'k0', l = 'l0',\n"
+ " m = 'm0', n = 'n0', o = 'o0', p = 'p0', q = 'q0', r = 'r0',\n"
+ " s = 's0', t = 't0', u = 'u0', v = 'v0', w = 'w0', x = 'x0',\n"
+ " y = 'y0', z = 'z0', A = 'A0', B = 'B0', C = 'C0', D = 'D0',\n"
+ " E = 'E0', F = 'F0', G = 'G0', H = 'H0', I = 'I0', J = 'J0',\n"
+ " K = 'K0', L = 'L0', M = 'M0', N = 'N0', O = 'O0', P = 'P0',\n"
+ " Q = 'Q0', R = 'R0', S = 'S0', T = 'T0', U = 'U0', V = 'V0',\n"
+ " W = 'W0', X = 'X0', Y = 'Y0', Z = 'Z0';\n"
+ "var a = 'a1', b = 'b1', c = 'c1', d = 'd1', e = 'e1', _ = 'f1',\n"
+ " g = 'g1', h = 'h1', i = 'i1', j = 'j1', k = 'k1', l = 'l1',\n"
+ " m = 'm1', n = 'n1', o = 'o1', p = 'p1', q = 'q1', r = 'r1',\n"
+ " s = 's1', t = 't1', u = 'u1', v = 'v1', w = 'w1', x = 'x1',\n"
+ " y = 'y1', z = 'z1', A = 'A1', B = 'B1', C = 'C1', D = 'D1',\n"
+ " E = 'E1', F = 'F1', G = 'G1', H = 'H1', I = 'I1', J = 'J1',\n"
+ " K = 'K1', L = 'L1', M = 'M1', N = 'N1', O = 'O1', P = 'P1',\n"
+ " Q = 'Q1', R = 'R1', S = 'S1', T = 'T1', U = 'U1', V = 'V1',\n"
+ " W = 'W1', X = 'X1', Y = 'Y1', Z = 'Z1';\n"
+ "var a = 'a2', b = 'b2', c = 'c2', d = 'd2', e = 'e2', _ = 'f2',\n"
+ " g = 'g2', h = 'h2', i = 'i2', j = 'j2', k = 'k2', l = 'l2',\n"
+ " m = 'm2', n = 'n2', o = 'o2', p = 'p2', q = 'q2', r = 'r2',\n"
+ " s = 's2', t = 't2', u = 'u2', v = 'v2', w = 'w2', x = 'x2',\n"
+ " y = 'y2', z = 'z2', A = 'A2', B = 'B2', C = 'C2', D = 'D2',\n"
+ " E = 'E2', F = 'F2', G = 'G2', H = 'H2', I = 'I2', J = 'J2',\n"
+ " K = 'K2', L = 'L2', M = 'M2', N = 'N2', O = 'O2', P = 'P2',\n"
+ " Q = 'Q2', R = 'R2', S = 'S2', T = 'T2', U = 'U2', V = 'V2',\n"
+ " W = 'W2', X = 'X2', Y = 'Y2', Z = 'Z2';\n"
+ "var a = 'a3', b = 'b3', c = 'c3', d = 'd3', e = 'e3', _ = 'f3',\n"
+ " g = 'g3', h = 'h3', i = 'i3', j = 'j3', k = 'k3', l = 'l3',\n"
+ " m = 'm3', n = 'n3', o = 'o3', p = 'p3', q = 'q3', r = 'r3',\n"
+ " s = 's3', t = 't3', u = 'u3', v = 'v3', w = 'w3', x = 'x3',\n"
+ " y = 'y3', z = 'z3', A = 'A3', B = 'B3', C = 'C3', D = 'D3',\n"
+ " E = 'E3', F = 'F3', G = 'G3', H = 'H3', I = 'I3', J = 'J3',\n"
+ " K = 'K3', L = 'L3', M = 'M3', N = 'N3', O = 'O3', P = 'P3',\n"
+ " Q = 'Q3', R = 'R3', S = 'S3', T = 'T3', U = 'U3', V = 'V3',\n"
+ " W = 'W3', X = 'X3', Y = 'Y3', Z = 'Z3';\n"
+ "var a = 'a4', b = 'b4', c = 'c4', d = 'd4', e = 'e4', _ = 'f4',\n"
+ " g = 'g4', h = 'h4', i = 'i4', j = 'j4', k = 'k4', l = 'l4',\n"
+ " m = 'm4', n = 'n4', o = 'o4', p = 'p4', q = 'q4', r = 'r4',\n"
+ " s = 's4', t = 't4', u = 'u4', v = 'v4', w = 'w4', x = 'x4',\n"
+ " y = 'y4', z = 'z4', A = 'A4', B = 'B4', C = 'C4', D = 'D4',\n"
+ " E = 'E4', F = 'F4', G = 'G4', H = 'H4', I = 'I4', J = 'J4',\n"
+ " K = 'K4', L = 'L4', M = 'M4', N = 'N4', O = 'O4', P = 'P4',\n"
+ " Q = 'Q4', R = 'R4', S = 'S4', T = 'T4', U = 'U4', V = 'V4',\n"
+ " W = 'W4', X = 'X4', Y = 'Y4', Z = 'Z4';\n"
+ "var a = 'a5', b = 'b5', c = 'c5', d = 'd5', e = 'e5', _ = 'f5',\n"
+ " g = 'g5', h = 'h5', i = 'i5', j = 'j5', k = 'k5', l = 'l5',\n"
+ " m = 'm5', n = 'n5', o = 'o5', p = 'p5', q = 'q5', r = 'r5',\n"
+ " s = 's5', t = 't5', u = 'u5', v = 'v5', w = 'w5', x = 'x5',\n"
+ " y = 'y5', z = 'z5', A = 'A5', B = 'B5', C = 'C5', D = 'D5',\n"
+ " E = 'E5', F = 'F5', G = 'G5', H = 'H5', I = 'I5', J = 'J5',\n"
+ " K = 'K5', L = 'L5', M = 'M5', N = 'N5', O = 'O5', P = 'P5',\n"
+ " Q = 'Q5', R = 'R5', S = 'S5', T = 'T5', U = 'U5', V = 'V5',\n"
+ " W = 'W5', X = 'X5', Y = 'Y5', Z = 'Z5';\n"
rmcilroy 2016/01/05 13:46:10 Optional suggestion - if you just want to fill up
oth 2016/01/05 18:31:59 Done. There are 16-bit operands U16 which means do
+ "for (var i = 0; i < 3; i++) {\n"
+ " if (i == 1) continue;\n"
+ " if (i == 2) break;\n"
+ "}\n"
+ "return 3;",
+ kPointerSize * 53,
+ 1,
+ 1347,
+ {
+#define L(c, r) B(LdaConstant), U8(c), B(Star), R(r)
+#define LW(c, r) B(LdaConstantWide), U16(c), B(Star), R(r)
+ L(0, 0), L(1, 1), L(2, 2), L(3, 3), L(4, 4), L(5, 5), L(6, 6),
+ L(7, 7), L(8, 8), L(9, 9), L(10, 10), L(11, 11), L(12, 12),
+ L(13, 13), L(14, 14), L(15, 15), L(16, 16), L(17, 17), L(18, 18),
+ L(19, 19), L(20, 20), L(21, 21), L(22, 22), L(23, 23), L(24, 24),
+ L(25, 25), L(26, 26), L(27, 27), L(28, 28), L(29, 29), L(30, 30),
+ L(31, 31), L(32, 32), L(33, 33), L(34, 34), L(35, 35), L(36, 36),
+ L(37, 37), L(38, 38), L(39, 39), L(40, 40), L(41, 41), L(42, 42),
+ L(43, 43), L(44, 44), L(45, 45), L(46, 46), L(47, 47), L(48, 48),
+ L(49, 49), L(50, 50), L(51, 51), L(52, 0), L(53, 1), L(54, 2),
+ L(55, 3), L(56, 4), L(57, 5), L(58, 6), L(59, 7), L(60, 8), L(61, 9),
+ L(62, 10), L(63, 11), L(64, 12), L(65, 13), L(66, 14), L(67, 15),
+ L(68, 16), L(69, 17), L(70, 18), L(71, 19), L(72, 20), L(73, 21),
+ L(74, 22), L(75, 23), L(76, 24), L(77, 25), L(78, 26), L(79, 27),
+ L(80, 28), L(81, 29), L(82, 30), L(83, 31), L(84, 32), L(85, 33),
+ L(86, 34), L(87, 35), L(88, 36), L(89, 37), L(90, 38), L(91, 39),
+ L(92, 40), L(93, 41), L(94, 42), L(95, 43), L(96, 44), L(97, 45),
+ L(98, 46), L(99, 47), L(100, 48), L(101, 49), L(102, 50), L(103, 51),
+ L(104, 0), L(105, 1), L(106, 2), L(107, 3), L(108, 4), L(109, 5),
+ L(110, 6), L(111, 7), L(112, 8), L(113, 9), L(114, 10), L(115, 11),
+ L(116, 12), L(117, 13), L(118, 14), L(119, 15), L(120, 16),
+ L(121, 17), L(122, 18), L(123, 19), L(124, 20), L(125, 21),
+ L(126, 22), L(127, 23), L(128, 24), L(129, 25), L(130, 26),
+ L(131, 27), L(132, 28), L(133, 29), L(134, 30), L(135, 31),
+ L(136, 32), L(137, 33), L(138, 34), L(139, 35), L(140, 36),
+ L(141, 37), L(142, 38), L(143, 39), L(144, 40), L(145, 41),
+ L(146, 42), L(147, 43), L(148, 44), L(149, 45), L(150, 46),
+ L(151, 47), L(152, 48), L(153, 49), L(154, 50), L(155, 51),
+ L(156, 0), L(157, 1), L(158, 2), L(159, 3), L(160, 4), L(161, 5),
+ L(162, 6), L(163, 7), L(164, 8), L(165, 9), L(166, 10), L(167, 11),
+ L(168, 12), L(169, 13), L(170, 14), L(171, 15), L(172, 16),
+ L(173, 17), L(174, 18), L(175, 19), L(176, 20), L(177, 21),
+ L(178, 22), L(179, 23), L(180, 24), L(181, 25), L(182, 26),
+ L(183, 27), L(184, 28), L(185, 29), L(186, 30), L(187, 31),
+ L(188, 32), L(189, 33), L(190, 34), L(191, 35), L(192, 36),
+ L(193, 37), L(194, 38), L(195, 39), L(196, 40), L(197, 41),
+ L(198, 42), L(199, 43), L(200, 44), L(201, 45), L(202, 46),
+ L(203, 47), L(204, 48), L(205, 49), L(206, 50), L(207, 51),
+ L(208, 0), L(209, 1), L(210, 2), L(211, 3), L(212, 4), L(213, 5),
+ L(214, 6), L(215, 7), L(216, 8), L(217, 9), L(218, 10), L(219, 11),
+ L(220, 12), L(221, 13), L(222, 14), L(223, 15), L(224, 16),
+ L(225, 17), L(226, 18), L(227, 19), L(228, 20), L(229, 21),
+ L(230, 22), L(231, 23), L(232, 24), L(233, 25), L(234, 26),
+ L(235, 27), L(236, 28), L(237, 29), L(238, 30), L(239, 31),
+ L(240, 32), L(241, 33), L(242, 34), L(243, 35), L(244, 36),
+ L(245, 37), L(246, 38), L(247, 39), L(248, 40), L(249, 41),
+ L(250, 42), L(251, 43), L(252, 44), L(253, 45), L(254, 46),
+ L(255, 47), LW(256, 48), LW(257, 49), LW(258, 50), LW(259, 51),
+ LW(260, 0), LW(261, 1), LW(262, 2), LW(263, 3), LW(264, 4),
+ LW(265, 5), LW(266, 6), LW(267, 7), LW(268, 8), LW(269, 9),
+ LW(270, 10), LW(271, 11), LW(272, 12), LW(273, 13), LW(274, 14),
+ LW(275, 15), LW(276, 16), LW(277, 17), LW(278, 18), LW(279, 19),
+ LW(280, 20), LW(281, 21), LW(282, 22), LW(283, 23), LW(284, 24),
+ LW(285, 25), LW(286, 26), LW(287, 27), LW(288, 28), LW(289, 29),
+ LW(290, 30), LW(291, 31), LW(292, 32), LW(293, 33), LW(294, 34),
+ LW(295, 35), LW(296, 36), LW(297, 37), LW(298, 38), LW(299, 39),
+ LW(300, 40), LW(301, 41), LW(302, 42), LW(303, 43), LW(304, 44),
+ LW(305, 45), LW(306, 46), LW(307, 47), LW(308, 48), LW(309, 49),
+ LW(310, 50), LW(311, 51),
+#undef LW
+#undef L
+ B(LdaZero), //
+ B(Star), R(8), //
+ B(LdaSmi8), U8(3), //
+ B(TestLessThan), R(8), //
+ B(JumpIfFalseConstantWide), U16(313), //
+ B(LdaSmi8), U8(1), //
+ B(TestEqual), R(8), //
+ B(JumpIfFalseConstantWide), U16(312), //
+ B(JumpConstantWide), U16(314), //
+ B(LdaSmi8), U8(2), //
+ B(TestEqual), R(8), //
+ B(JumpIfFalseConstantWide), U16(312), //
+ B(JumpConstantWide), U16(314), //
+ B(Ldar), R(8), //
+ B(ToNumber), //
+ B(Star), R(52), //
+ B(Inc), //
+ B(Star), R(8), //
+ B(Jump), U8(-35), //
+ B(LdaSmi8), U8(3), //
+ B(Return) //
+ },
+ 315,
+ {
+#define S(x) CcTest::i_isolate()->factory()->NewStringFromAsciiChecked(x)
+#define N(x) CcTest::i_isolate()->factory()->NewNumberFromInt(x)
+ S("a0"), S("b0"), S("c0"), S("d0"), S("e0"), S("f0"), S("g0"),
+ S("h0"), S("i0"), S("j0"), S("k0"), S("l0"), S("m0"), S("n0"),
+ S("o0"), S("p0"), S("q0"), S("r0"), S("s0"), S("t0"), S("u0"),
+ S("v0"), S("w0"), S("x0"), S("y0"), S("z0"), S("A0"), S("B0"),
+ S("C0"), S("D0"), S("E0"), S("F0"), S("G0"), S("H0"), S("I0"),
+ S("J0"), S("K0"), S("L0"), S("M0"), S("N0"), S("O0"), S("P0"),
+ S("Q0"), S("R0"), S("S0"), S("T0"), S("U0"), S("V0"), S("W0"),
+ S("X0"), S("Y0"), S("Z0"), S("a1"), S("b1"), S("c1"), S("d1"),
+ S("e1"), S("f1"), S("g1"), S("h1"), S("i1"), S("j1"), S("k1"),
+ S("l1"), S("m1"), S("n1"), S("o1"), S("p1"), S("q1"), S("r1"),
+ S("s1"), S("t1"), S("u1"), S("v1"), S("w1"), S("x1"), S("y1"),
+ S("z1"), S("A1"), S("B1"), S("C1"), S("D1"), S("E1"), S("F1"),
+ S("G1"), S("H1"), S("I1"), S("J1"), S("K1"), S("L1"), S("M1"),
+ S("N1"), S("O1"), S("P1"), S("Q1"), S("R1"), S("S1"), S("T1"),
+ S("U1"), S("V1"), S("W1"), S("X1"), S("Y1"), S("Z1"), S("a2"),
+ S("b2"), S("c2"), S("d2"), S("e2"), S("f2"), S("g2"), S("h2"),
+ S("i2"), S("j2"), S("k2"), S("l2"), S("m2"), S("n2"), S("o2"),
+ S("p2"), S("q2"), S("r2"), S("s2"), S("t2"), S("u2"), S("v2"),
+ S("w2"), S("x2"), S("y2"), S("z2"), S("A2"), S("B2"), S("C2"),
+ S("D2"), S("E2"), S("F2"), S("G2"), S("H2"), S("I2"), S("J2"),
+ S("K2"), S("L2"), S("M2"), S("N2"), S("O2"), S("P2"), S("Q2"),
+ S("R2"), S("S2"), S("T2"), S("U2"), S("V2"), S("W2"), S("X2"),
+ S("Y2"), S("Z2"), S("a3"), S("b3"), S("c3"), S("d3"), S("e3"),
+ S("f3"), S("g3"), S("h3"), S("i3"), S("j3"), S("k3"), S("l3"),
+ S("m3"), S("n3"), S("o3"), S("p3"), S("q3"), S("r3"), S("s3"),
+ S("t3"), S("u3"), S("v3"), S("w3"), S("x3"), S("y3"), S("z3"),
+ S("A3"), S("B3"), S("C3"), S("D3"), S("E3"), S("F3"), S("G3"),
+ S("H3"), S("I3"), S("J3"), S("K3"), S("L3"), S("M3"), S("N3"),
+ S("O3"), S("P3"), S("Q3"), S("R3"), S("S3"), S("T3"), S("U3"),
+ S("V3"), S("W3"), S("X3"), S("Y3"), S("Z3"), S("a4"), S("b4"),
+ S("c4"), S("d4"), S("e4"), S("f4"), S("g4"), S("h4"), S("i4"),
+ S("j4"), S("k4"), S("l4"), S("m4"), S("n4"), S("o4"), S("p4"),
+ S("q4"), S("r4"), S("s4"), S("t4"), S("u4"), S("v4"), S("w4"),
+ S("x4"), S("y4"), S("z4"), S("A4"), S("B4"), S("C4"), S("D4"),
+ S("E4"), S("F4"), S("G4"), S("H4"), S("I4"), S("J4"), S("K4"),
+ S("L4"), S("M4"), S("N4"), S("O4"), S("P4"), S("Q4"), S("R4"),
+ S("S4"), S("T4"), S("U4"), S("V4"), S("W4"), S("X4"), S("Y4"),
+ S("Z4"), S("a5"), S("b5"), S("c5"), S("d5"), S("e5"), S("f5"),
+ S("g5"), S("h5"), S("i5"), S("j5"), S("k5"), S("l5"), S("m5"),
+ S("n5"), S("o5"), S("p5"), S("q5"), S("r5"), S("s5"), S("t5"),
+ S("u5"), S("v5"), S("w5"), S("x5"), S("y5"), S("z5"), S("A5"),
+ S("B5"), S("C5"), S("D5"), S("E5"), S("F5"), S("G5"), S("H5"),
+ S("I5"), S("J5"), S("K5"), S("L5"), S("M5"), S("N5"), S("O5"),
+ S("P5"), S("Q5"), S("R5"), S("S5"), S("T5"), S("U5"), S("V5"),
+ S("W5"), S("X5"), S("Y5"), S("Z5"), N(6), N(33), N(13),
+#undef N
+#undef S
+ }}};
+
+ for (size_t i = 0; i < arraysize(snippets); i++) {
+ Handle<BytecodeArray> bytecode_array =
+ helper.MakeBytecodeForFunctionBody(snippets[i].code_snippet);
+ CheckBytecodeArrayEqual(snippets[i], bytecode_array);
+ }
+}
+
+
TEST(UnaryOperators) {
InitializedHandleScope handle_scope;
BytecodeGeneratorHelper helper;

Powered by Google App Engine
This is Rietveld 408576698