10a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath// Copyright 2008 Google Inc.
20a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath// Author: Lincoln Smith
30a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath//
40a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath// Licensed under the Apache License, Version 2.0 (the "License");
50a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath// you may not use this file except in compliance with the License.
60a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath// You may obtain a copy of the License at
70a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath//
80a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath//      http://www.apache.org/licenses/LICENSE-2.0
90a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath//
100a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath// Unless required by applicable law or agreed to in writing, software
110a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath// distributed under the License is distributed on an "AS IS" BASIS,
120a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath// See the License for the specific language governing permissions and
140a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath// limitations under the License.
150a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath//
160a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath// Unit tests for the class VCDiffInstructionMap, found in instruction_map.h.
170a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
180a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath#include <config.h>
190a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath#include "instruction_map.h"
200a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath#include "codetable.h"
210a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath#include "testing.h"
220a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath#include "vcdiff_defs.h"
230a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
240a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamathnamespace open_vcdiff {
250a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamathnamespace {
260a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
270a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamathclass InstructionMapTest : public testing::Test {
280a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath protected:
290a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  static void SetUpTestCase();
300a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  static void TearDownTestCase();
310a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
320a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  static void AddExerciseOpcode(unsigned char inst1,
330a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                unsigned char mode1,
340a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                unsigned char size1,
350a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                unsigned char inst2,
360a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                unsigned char mode2,
370a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                unsigned char size2,
380a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                int opcode);
390a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
400a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  void VerifyExerciseFirstInstruction(unsigned char expected_opcode,
410a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                      unsigned char inst,
420a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                      unsigned char size,
430a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                      unsigned char mode);
440a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
450a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  void VerifyExerciseSecondInstruction(unsigned char expected_opcode,
460a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                       unsigned char inst1,
470a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                       unsigned char size1,
480a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                       unsigned char mode1,
490a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                       unsigned char inst2,
500a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                       unsigned char size2,
510a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                       unsigned char mode2);
520a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
530a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // This value is designed so that the total number of inst values and modes
540a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // will equal 8 (VCD_NOOP, VCD_ADD, VCD_RUN, VCD_COPY modes 0 - 4).
550a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // Eight combinations of inst and mode, times two possible size values,
560a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // squared (because there are two instructions per opcode), makes
570a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // exactly 256 possible instruction combinations, which fits kCodeTableSize
580a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // (the number of opcodes in the table.)
590a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  static const int kLastExerciseMode = 4;
600a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
610a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // A code table that exercises as many combinations as possible:
620a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // 2 instructions, each is a NOOP, ADD, RUN, or one of 5 copy modes
630a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // (== 8 total combinations of inst and mode), and each has
640a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // size == 0 or 255 (2 possibilities.)
650a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  static VCDiffCodeTableData* g_exercise_code_table_;
660a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
670a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // The instruction map corresponding to kDefaultCodeTableData.
680a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  static const VCDiffInstructionMap* default_map;
690a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
700a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // The instruction map corresponding to g_exercise_code_table_.
710a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  static const VCDiffInstructionMap* exercise_map;
720a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
730a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  size_t out_index;
740a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath};
750a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
760a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathVCDiffCodeTableData* InstructionMapTest::g_exercise_code_table_ = NULL;
770a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamathconst VCDiffInstructionMap* InstructionMapTest::default_map = NULL;
780a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamathconst VCDiffInstructionMap* InstructionMapTest::exercise_map = NULL;
790a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
800a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamathvoid InstructionMapTest::SetUpTestCase() {
810a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  g_exercise_code_table_ = new VCDiffCodeTableData;
820a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  int opcode = 0;
830a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  for (unsigned char inst_mode1 = 0;
840a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath       inst_mode1 <= VCD_LAST_INSTRUCTION_TYPE + kLastExerciseMode;
850a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath       ++inst_mode1) {
860a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char inst1 = inst_mode1;
870a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char mode1 = 0;
880a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    if (inst_mode1 > VCD_COPY) {
890a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      inst1 = VCD_COPY;
900a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      mode1 = inst_mode1 - VCD_COPY;
910a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    }
920a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    for (unsigned char inst_mode2 = 0;
930a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath         inst_mode2 <= VCD_LAST_INSTRUCTION_TYPE + kLastExerciseMode;
940a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath         ++inst_mode2) {
950a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      unsigned char inst2 = inst_mode2;
960a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      unsigned char mode2 = 0;
970a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      if (inst_mode2 > VCD_COPY) {
980a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath        inst2 = VCD_COPY;
990a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath        mode2 = inst_mode2 - VCD_COPY;
1000a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      }
1010a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      AddExerciseOpcode(inst1, mode1, 0, inst2, mode2, 0, opcode++);
1020a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      AddExerciseOpcode(inst1, mode1, 0, inst2, mode2, 255, opcode++);
1030a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      AddExerciseOpcode(inst1, mode1, 255, inst2, mode2, 0, opcode++);
1040a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      AddExerciseOpcode(inst1, mode1, 255, inst2, mode2, 255, opcode++);
1050a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    }
1060a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  }
1070a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // This is a CHECK rather than an EXPECT because it validates only
1080a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // the logic of the test, not of the code being tested.
1090a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  CHECK_EQ(VCDiffCodeTableData::kCodeTableSize, opcode);
1100a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
1110a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_TRUE(VCDiffCodeTableData::kDefaultCodeTableData.Validate());
1120a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_TRUE(g_exercise_code_table_->Validate(kLastExerciseMode));
1130a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  default_map = VCDiffInstructionMap::GetDefaultInstructionMap();
1140a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  exercise_map = new VCDiffInstructionMap(*g_exercise_code_table_,
1150a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                          kLastExerciseMode);
1160a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
1170a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
1180a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamathvoid InstructionMapTest::TearDownTestCase() {
1190a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  delete exercise_map;
1200a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  delete g_exercise_code_table_;
1210a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
1220a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
1230a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamathvoid InstructionMapTest::AddExerciseOpcode(unsigned char inst1,
1240a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                           unsigned char mode1,
1250a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                           unsigned char size1,
1260a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                           unsigned char inst2,
1270a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                           unsigned char mode2,
1280a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                           unsigned char size2,
1290a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                           int opcode) {
1300a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  g_exercise_code_table_->inst1[opcode] = inst1;
1310a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  g_exercise_code_table_->mode1[opcode] = mode1;
1320a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  g_exercise_code_table_->size1[opcode] = (inst1 == VCD_NOOP) ? 0 : size1;
1330a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  g_exercise_code_table_->inst2[opcode] = inst2;
1340a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  g_exercise_code_table_->mode2[opcode] = mode2;
1350a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  g_exercise_code_table_->size2[opcode] = (inst2 == VCD_NOOP) ? 0 : size2;
1360a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
1370a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
1380a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamathvoid InstructionMapTest::VerifyExerciseFirstInstruction(
1390a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char expected_opcode,
1400a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char inst,
1410a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char size,
1420a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char mode) {
1430a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  int found_opcode = exercise_map->LookupFirstOpcode(inst, size, mode);
1440a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  if (g_exercise_code_table_->inst1[found_opcode] == VCD_NOOP) {
1450a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    // The opcode is backwards: (VCD_NOOP, [instruction])
1460a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_GE(expected_opcode, found_opcode);
1470a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(inst, g_exercise_code_table_->inst2[found_opcode]);
1480a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(size, g_exercise_code_table_->size2[found_opcode]);
1490a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(mode, g_exercise_code_table_->mode2[found_opcode]);
1500a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(VCD_NOOP, g_exercise_code_table_->inst1[found_opcode]);
1510a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(0, g_exercise_code_table_->size1[found_opcode]);
1520a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(0, g_exercise_code_table_->mode1[found_opcode]);
1530a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  } else {
1540a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(expected_opcode, found_opcode);
1550a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(inst, g_exercise_code_table_->inst1[found_opcode]);
1560a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(size, g_exercise_code_table_->size1[found_opcode]);
1570a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(mode, g_exercise_code_table_->mode1[found_opcode]);
1580a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(VCD_NOOP, g_exercise_code_table_->inst2[found_opcode]);
1590a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(0, g_exercise_code_table_->size2[found_opcode]);
1600a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    EXPECT_EQ(0, g_exercise_code_table_->mode2[found_opcode]);
1610a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  }
1620a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
1630a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
1640a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamathvoid InstructionMapTest::VerifyExerciseSecondInstruction(
1650a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char expected_opcode,
1660a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char inst1,
1670a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char size1,
1680a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char mode1,
1690a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char inst2,
1700a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char size2,
1710a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char mode2) {
1720a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  int first_opcode = exercise_map->LookupFirstOpcode(inst1, size1, mode1);
1730a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_NE(kNoOpcode, first_opcode);
1740a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(expected_opcode,
1750a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath            exercise_map->LookupSecondOpcode(first_opcode,
1760a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                             inst2,
1770a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                             size2,
1780a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                             mode2));
1790a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
1800a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
1810a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstNoop) {
1820a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupFirstOpcode(VCD_NOOP, 0, 0));
1830a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupFirstOpcode(VCD_NOOP, 0, 255));
1840a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupFirstOpcode(VCD_NOOP, 255, 0));
1850a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupFirstOpcode(VCD_NOOP, 255, 255));
1860a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
1870a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
1880a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstAdd) {
1890a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(2, default_map->LookupFirstOpcode(VCD_ADD, 1, 0));
1900a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(3, default_map->LookupFirstOpcode(VCD_ADD, 2, 0));
1910a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(4, default_map->LookupFirstOpcode(VCD_ADD, 3, 0));
1920a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(5, default_map->LookupFirstOpcode(VCD_ADD, 4, 0));
1930a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(6, default_map->LookupFirstOpcode(VCD_ADD, 5, 0));
1940a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(7, default_map->LookupFirstOpcode(VCD_ADD, 6, 0));
1950a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(8, default_map->LookupFirstOpcode(VCD_ADD, 7, 0));
1960a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(9, default_map->LookupFirstOpcode(VCD_ADD, 8, 0));
1970a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(10, default_map->LookupFirstOpcode(VCD_ADD, 9, 0));
1980a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(11, default_map->LookupFirstOpcode(VCD_ADD, 10, 0));
1990a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(12, default_map->LookupFirstOpcode(VCD_ADD, 11, 0));
2000a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(13, default_map->LookupFirstOpcode(VCD_ADD, 12, 0));
2010a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(14, default_map->LookupFirstOpcode(VCD_ADD, 13, 0));
2020a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(15, default_map->LookupFirstOpcode(VCD_ADD, 14, 0));
2030a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(16, default_map->LookupFirstOpcode(VCD_ADD, 15, 0));
2040a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(17, default_map->LookupFirstOpcode(VCD_ADD, 16, 0));
2050a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(18, default_map->LookupFirstOpcode(VCD_ADD, 17, 0));
2060a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupFirstOpcode(VCD_ADD, 100, 0));
2070a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupFirstOpcode(VCD_ADD, 255, 0));
2080a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(1, default_map->LookupFirstOpcode(VCD_ADD, 0, 0));
2090a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // Value of "mode" should not matter
2100a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(2, default_map->LookupFirstOpcode(VCD_ADD, 1, 2));
2110a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(2, default_map->LookupFirstOpcode(VCD_ADD, 1, 255));
2120a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
2130a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
2140a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstRun) {
2150a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(0, default_map->LookupFirstOpcode(VCD_RUN, 0, 0));
2160a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupFirstOpcode(VCD_RUN, 1, 0));
2170a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupFirstOpcode(VCD_RUN, 255, 0));
2180a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // Value of "mode" should not matter
2190a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(0, default_map->LookupFirstOpcode(VCD_RUN, 0, 2));
2200a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
2210a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
2220a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstCopyMode0) {
2230a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(19, default_map->LookupFirstOpcode(VCD_COPY, 0, 0));
2240a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(20, default_map->LookupFirstOpcode(VCD_COPY, 4, 0));
2250a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(21, default_map->LookupFirstOpcode(VCD_COPY, 5, 0));
2260a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(22, default_map->LookupFirstOpcode(VCD_COPY, 6, 0));
2270a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(23, default_map->LookupFirstOpcode(VCD_COPY, 7, 0));
2280a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(24, default_map->LookupFirstOpcode(VCD_COPY, 8, 0));
2290a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(25, default_map->LookupFirstOpcode(VCD_COPY, 9, 0));
2300a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(26, default_map->LookupFirstOpcode(VCD_COPY, 10, 0));
2310a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(27, default_map->LookupFirstOpcode(VCD_COPY, 11, 0));
2320a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(28, default_map->LookupFirstOpcode(VCD_COPY, 12, 0));
2330a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(29, default_map->LookupFirstOpcode(VCD_COPY, 13, 0));
2340a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(30, default_map->LookupFirstOpcode(VCD_COPY, 14, 0));
2350a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(31, default_map->LookupFirstOpcode(VCD_COPY, 15, 0));
2360a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(32, default_map->LookupFirstOpcode(VCD_COPY, 16, 0));
2370a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(33, default_map->LookupFirstOpcode(VCD_COPY, 17, 0));
2380a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(34, default_map->LookupFirstOpcode(VCD_COPY, 18, 0));
2390a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
2400a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
2410a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstCopyMode1) {
2420a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(35, default_map->LookupFirstOpcode(VCD_COPY, 0, 1));
2430a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(36, default_map->LookupFirstOpcode(VCD_COPY, 4, 1));
2440a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(37, default_map->LookupFirstOpcode(VCD_COPY, 5, 1));
2450a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(38, default_map->LookupFirstOpcode(VCD_COPY, 6, 1));
2460a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(39, default_map->LookupFirstOpcode(VCD_COPY, 7, 1));
2470a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(40, default_map->LookupFirstOpcode(VCD_COPY, 8, 1));
2480a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(41, default_map->LookupFirstOpcode(VCD_COPY, 9, 1));
2490a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(42, default_map->LookupFirstOpcode(VCD_COPY, 10, 1));
2500a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(43, default_map->LookupFirstOpcode(VCD_COPY, 11, 1));
2510a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(44, default_map->LookupFirstOpcode(VCD_COPY, 12, 1));
2520a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(45, default_map->LookupFirstOpcode(VCD_COPY, 13, 1));
2530a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(46, default_map->LookupFirstOpcode(VCD_COPY, 14, 1));
2540a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(47, default_map->LookupFirstOpcode(VCD_COPY, 15, 1));
2550a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(48, default_map->LookupFirstOpcode(VCD_COPY, 16, 1));
2560a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(49, default_map->LookupFirstOpcode(VCD_COPY, 17, 1));
2570a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(50, default_map->LookupFirstOpcode(VCD_COPY, 18, 1));
2580a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
2590a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
2600a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstCopyMode2) {
2610a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(51, default_map->LookupFirstOpcode(VCD_COPY, 0, 2));
2620a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(52, default_map->LookupFirstOpcode(VCD_COPY, 4, 2));
2630a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(53, default_map->LookupFirstOpcode(VCD_COPY, 5, 2));
2640a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(54, default_map->LookupFirstOpcode(VCD_COPY, 6, 2));
2650a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(55, default_map->LookupFirstOpcode(VCD_COPY, 7, 2));
2660a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(56, default_map->LookupFirstOpcode(VCD_COPY, 8, 2));
2670a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(57, default_map->LookupFirstOpcode(VCD_COPY, 9, 2));
2680a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(58, default_map->LookupFirstOpcode(VCD_COPY, 10, 2));
2690a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(59, default_map->LookupFirstOpcode(VCD_COPY, 11, 2));
2700a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(60, default_map->LookupFirstOpcode(VCD_COPY, 12, 2));
2710a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(61, default_map->LookupFirstOpcode(VCD_COPY, 13, 2));
2720a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(62, default_map->LookupFirstOpcode(VCD_COPY, 14, 2));
2730a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(63, default_map->LookupFirstOpcode(VCD_COPY, 15, 2));
2740a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(64, default_map->LookupFirstOpcode(VCD_COPY, 16, 2));
2750a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(65, default_map->LookupFirstOpcode(VCD_COPY, 17, 2));
2760a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(66, default_map->LookupFirstOpcode(VCD_COPY, 18, 2));
2770a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
2780a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
2790a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstCopyMode3) {
2800a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(67, default_map->LookupFirstOpcode(VCD_COPY, 0, 3));
2810a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(68, default_map->LookupFirstOpcode(VCD_COPY, 4, 3));
2820a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(69, default_map->LookupFirstOpcode(VCD_COPY, 5, 3));
2830a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(70, default_map->LookupFirstOpcode(VCD_COPY, 6, 3));
2840a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(71, default_map->LookupFirstOpcode(VCD_COPY, 7, 3));
2850a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(72, default_map->LookupFirstOpcode(VCD_COPY, 8, 3));
2860a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(73, default_map->LookupFirstOpcode(VCD_COPY, 9, 3));
2870a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(74, default_map->LookupFirstOpcode(VCD_COPY, 10, 3));
2880a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(75, default_map->LookupFirstOpcode(VCD_COPY, 11, 3));
2890a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(76, default_map->LookupFirstOpcode(VCD_COPY, 12, 3));
2900a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(77, default_map->LookupFirstOpcode(VCD_COPY, 13, 3));
2910a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(78, default_map->LookupFirstOpcode(VCD_COPY, 14, 3));
2920a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(79, default_map->LookupFirstOpcode(VCD_COPY, 15, 3));
2930a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(80, default_map->LookupFirstOpcode(VCD_COPY, 16, 3));
2940a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(81, default_map->LookupFirstOpcode(VCD_COPY, 17, 3));
2950a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(82, default_map->LookupFirstOpcode(VCD_COPY, 18, 3));
2960a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
2970a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
2980a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstCopyMode4) {
2990a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(83, default_map->LookupFirstOpcode(VCD_COPY, 0, 4));
3000a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(84, default_map->LookupFirstOpcode(VCD_COPY, 4, 4));
3010a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(85, default_map->LookupFirstOpcode(VCD_COPY, 5, 4));
3020a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(86, default_map->LookupFirstOpcode(VCD_COPY, 6, 4));
3030a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(87, default_map->LookupFirstOpcode(VCD_COPY, 7, 4));
3040a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(88, default_map->LookupFirstOpcode(VCD_COPY, 8, 4));
3050a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(89, default_map->LookupFirstOpcode(VCD_COPY, 9, 4));
3060a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(90, default_map->LookupFirstOpcode(VCD_COPY, 10, 4));
3070a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(91, default_map->LookupFirstOpcode(VCD_COPY, 11, 4));
3080a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(92, default_map->LookupFirstOpcode(VCD_COPY, 12, 4));
3090a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(93, default_map->LookupFirstOpcode(VCD_COPY, 13, 4));
3100a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(94, default_map->LookupFirstOpcode(VCD_COPY, 14, 4));
3110a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(95, default_map->LookupFirstOpcode(VCD_COPY, 15, 4));
3120a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(96, default_map->LookupFirstOpcode(VCD_COPY, 16, 4));
3130a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(97, default_map->LookupFirstOpcode(VCD_COPY, 17, 4));
3140a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(98, default_map->LookupFirstOpcode(VCD_COPY, 18, 4));
3150a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
3160a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
3170a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstCopyMode5) {
3180a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(99, default_map->LookupFirstOpcode(VCD_COPY, 0, 5));
3190a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(100, default_map->LookupFirstOpcode(VCD_COPY, 4, 5));
3200a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(101, default_map->LookupFirstOpcode(VCD_COPY, 5, 5));
3210a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(102, default_map->LookupFirstOpcode(VCD_COPY, 6, 5));
3220a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(103, default_map->LookupFirstOpcode(VCD_COPY, 7, 5));
3230a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(104, default_map->LookupFirstOpcode(VCD_COPY, 8, 5));
3240a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(105, default_map->LookupFirstOpcode(VCD_COPY, 9, 5));
3250a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(106, default_map->LookupFirstOpcode(VCD_COPY, 10, 5));
3260a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(107, default_map->LookupFirstOpcode(VCD_COPY, 11, 5));
3270a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(108, default_map->LookupFirstOpcode(VCD_COPY, 12, 5));
3280a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(109, default_map->LookupFirstOpcode(VCD_COPY, 13, 5));
3290a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(110, default_map->LookupFirstOpcode(VCD_COPY, 14, 5));
3300a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(111, default_map->LookupFirstOpcode(VCD_COPY, 15, 5));
3310a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(112, default_map->LookupFirstOpcode(VCD_COPY, 16, 5));
3320a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(113, default_map->LookupFirstOpcode(VCD_COPY, 17, 5));
3330a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(114, default_map->LookupFirstOpcode(VCD_COPY, 18, 5));
3340a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
3350a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
3360a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstCopyMode6) {
3370a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(115, default_map->LookupFirstOpcode(VCD_COPY, 0, 6));
3380a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(116, default_map->LookupFirstOpcode(VCD_COPY, 4, 6));
3390a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(117, default_map->LookupFirstOpcode(VCD_COPY, 5, 6));
3400a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(118, default_map->LookupFirstOpcode(VCD_COPY, 6, 6));
3410a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(119, default_map->LookupFirstOpcode(VCD_COPY, 7, 6));
3420a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(120, default_map->LookupFirstOpcode(VCD_COPY, 8, 6));
3430a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(121, default_map->LookupFirstOpcode(VCD_COPY, 9, 6));
3440a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(122, default_map->LookupFirstOpcode(VCD_COPY, 10, 6));
3450a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(123, default_map->LookupFirstOpcode(VCD_COPY, 11, 6));
3460a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(124, default_map->LookupFirstOpcode(VCD_COPY, 12, 6));
3470a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(125, default_map->LookupFirstOpcode(VCD_COPY, 13, 6));
3480a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(126, default_map->LookupFirstOpcode(VCD_COPY, 14, 6));
3490a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(127, default_map->LookupFirstOpcode(VCD_COPY, 15, 6));
3500a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(128, default_map->LookupFirstOpcode(VCD_COPY, 16, 6));
3510a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(129, default_map->LookupFirstOpcode(VCD_COPY, 17, 6));
3520a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(130, default_map->LookupFirstOpcode(VCD_COPY, 18, 6));
3530a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
3540a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
3550a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstCopyMode7) {
3560a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(131, default_map->LookupFirstOpcode(VCD_COPY, 0, 7));
3570a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(132, default_map->LookupFirstOpcode(VCD_COPY, 4, 7));
3580a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(133, default_map->LookupFirstOpcode(VCD_COPY, 5, 7));
3590a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(134, default_map->LookupFirstOpcode(VCD_COPY, 6, 7));
3600a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(135, default_map->LookupFirstOpcode(VCD_COPY, 7, 7));
3610a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(136, default_map->LookupFirstOpcode(VCD_COPY, 8, 7));
3620a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(137, default_map->LookupFirstOpcode(VCD_COPY, 9, 7));
3630a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(138, default_map->LookupFirstOpcode(VCD_COPY, 10, 7));
3640a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(139, default_map->LookupFirstOpcode(VCD_COPY, 11, 7));
3650a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(140, default_map->LookupFirstOpcode(VCD_COPY, 12, 7));
3660a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(141, default_map->LookupFirstOpcode(VCD_COPY, 13, 7));
3670a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(142, default_map->LookupFirstOpcode(VCD_COPY, 14, 7));
3680a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(143, default_map->LookupFirstOpcode(VCD_COPY, 15, 7));
3690a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(144, default_map->LookupFirstOpcode(VCD_COPY, 16, 7));
3700a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(145, default_map->LookupFirstOpcode(VCD_COPY, 17, 7));
3710a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(146, default_map->LookupFirstOpcode(VCD_COPY, 18, 7));
3720a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
3730a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
3740a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstCopyMode8) {
3750a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(147, default_map->LookupFirstOpcode(VCD_COPY, 0, 8));
3760a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(148, default_map->LookupFirstOpcode(VCD_COPY, 4, 8));
3770a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(149, default_map->LookupFirstOpcode(VCD_COPY, 5, 8));
3780a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(150, default_map->LookupFirstOpcode(VCD_COPY, 6, 8));
3790a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(151, default_map->LookupFirstOpcode(VCD_COPY, 7, 8));
3800a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(152, default_map->LookupFirstOpcode(VCD_COPY, 8, 8));
3810a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(153, default_map->LookupFirstOpcode(VCD_COPY, 9, 8));
3820a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(154, default_map->LookupFirstOpcode(VCD_COPY, 10, 8));
3830a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(155, default_map->LookupFirstOpcode(VCD_COPY, 11, 8));
3840a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(156, default_map->LookupFirstOpcode(VCD_COPY, 12, 8));
3850a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(157, default_map->LookupFirstOpcode(VCD_COPY, 13, 8));
3860a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(158, default_map->LookupFirstOpcode(VCD_COPY, 14, 8));
3870a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(159, default_map->LookupFirstOpcode(VCD_COPY, 15, 8));
3880a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(160, default_map->LookupFirstOpcode(VCD_COPY, 16, 8));
3890a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(161, default_map->LookupFirstOpcode(VCD_COPY, 17, 8));
3900a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(162, default_map->LookupFirstOpcode(VCD_COPY, 18, 8));
3910a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
3920a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
3930a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupFirstCopyInvalid) {
3940a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupFirstOpcode(VCD_COPY, 3, 0));
3950a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupFirstOpcode(VCD_COPY, 3, 3));
3960a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupFirstOpcode(VCD_COPY, 255, 0));
3970a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
3980a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
3990a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondNoop) {
4000a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // The second opcode table does not store entries for NOOP instructions.
4010a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // Just make sure that a NOOP does not crash the lookup code.
4020a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(20, VCD_NOOP, 0, 0));
4030a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(20, VCD_NOOP, 0, 255));
4040a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(20, VCD_NOOP, 255, 0));
4050a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(20, VCD_NOOP, 255, 255));
4060a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
4070a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
4080a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondAdd) {
4090a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(247, default_map->LookupSecondOpcode(20, VCD_ADD, 1, 0));
4100a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(248, default_map->LookupSecondOpcode(36, VCD_ADD, 1, 0));
4110a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(249, default_map->LookupSecondOpcode(52, VCD_ADD, 1, 0));
4120a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(250, default_map->LookupSecondOpcode(68, VCD_ADD, 1, 0));
4130a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(251, default_map->LookupSecondOpcode(84, VCD_ADD, 1, 0));
4140a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(252, default_map->LookupSecondOpcode(100, VCD_ADD, 1, 0));
4150a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(253, default_map->LookupSecondOpcode(116, VCD_ADD, 1, 0));
4160a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(254, default_map->LookupSecondOpcode(132, VCD_ADD, 1, 0));
4170a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(255, default_map->LookupSecondOpcode(148, VCD_ADD, 1, 0));
4180a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // Value of "mode" should not matter
4190a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(247, default_map->LookupSecondOpcode(20, VCD_ADD, 1, 2));
4200a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(247, default_map->LookupSecondOpcode(20, VCD_ADD, 1, 255));
4210a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // Only valid 2nd ADD opcode has size 1
4220a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(20, VCD_ADD, 0, 0));
4230a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(20, VCD_ADD, 0, 255));
4240a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(20, VCD_ADD, 255, 0));
4250a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(0, VCD_ADD, 1, 0));
4260a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(1, VCD_ADD, 1, 0));
4270a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(247, VCD_ADD, 1, 0));
4280a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(255, VCD_ADD, 1, 0));
4290a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
4300a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
4310a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondRun) {
4320a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(0, VCD_RUN, 0, 0));
4330a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(20, VCD_RUN, 0, 0));
4340a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(20, VCD_RUN, 0, 255));
4350a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(20, VCD_RUN, 255, 0));
4360a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(20, VCD_RUN, 255, 255));
4370a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(255, VCD_RUN, 0, 0));
4380a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
4390a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
4400a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondCopyMode0) {
4410a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(163, default_map->LookupSecondOpcode(2, VCD_COPY, 4, 0));
4420a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(164, default_map->LookupSecondOpcode(2, VCD_COPY, 5, 0));
4430a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(165, default_map->LookupSecondOpcode(2, VCD_COPY, 6, 0));
4440a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(166, default_map->LookupSecondOpcode(3, VCD_COPY, 4, 0));
4450a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(167, default_map->LookupSecondOpcode(3, VCD_COPY, 5, 0));
4460a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(168, default_map->LookupSecondOpcode(3, VCD_COPY, 6, 0));
4470a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(169, default_map->LookupSecondOpcode(4, VCD_COPY, 4, 0));
4480a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(170, default_map->LookupSecondOpcode(4, VCD_COPY, 5, 0));
4490a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(171, default_map->LookupSecondOpcode(4, VCD_COPY, 6, 0));
4500a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(172, default_map->LookupSecondOpcode(5, VCD_COPY, 4, 0));
4510a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(173, default_map->LookupSecondOpcode(5, VCD_COPY, 5, 0));
4520a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(174, default_map->LookupSecondOpcode(5, VCD_COPY, 6, 0));
4530a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
4540a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
4550a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondCopyMode1) {
4560a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(175, default_map->LookupSecondOpcode(2, VCD_COPY, 4, 1));
4570a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(176, default_map->LookupSecondOpcode(2, VCD_COPY, 5, 1));
4580a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(177, default_map->LookupSecondOpcode(2, VCD_COPY, 6, 1));
4590a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(178, default_map->LookupSecondOpcode(3, VCD_COPY, 4, 1));
4600a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(179, default_map->LookupSecondOpcode(3, VCD_COPY, 5, 1));
4610a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(180, default_map->LookupSecondOpcode(3, VCD_COPY, 6, 1));
4620a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(181, default_map->LookupSecondOpcode(4, VCD_COPY, 4, 1));
4630a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(182, default_map->LookupSecondOpcode(4, VCD_COPY, 5, 1));
4640a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(183, default_map->LookupSecondOpcode(4, VCD_COPY, 6, 1));
4650a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(184, default_map->LookupSecondOpcode(5, VCD_COPY, 4, 1));
4660a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(185, default_map->LookupSecondOpcode(5, VCD_COPY, 5, 1));
4670a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(186, default_map->LookupSecondOpcode(5, VCD_COPY, 6, 1));
4680a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
4690a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
4700a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondCopyMode2) {
4710a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(187, default_map->LookupSecondOpcode(2, VCD_COPY, 4, 2));
4720a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(188, default_map->LookupSecondOpcode(2, VCD_COPY, 5, 2));
4730a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(189, default_map->LookupSecondOpcode(2, VCD_COPY, 6, 2));
4740a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(190, default_map->LookupSecondOpcode(3, VCD_COPY, 4, 2));
4750a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(191, default_map->LookupSecondOpcode(3, VCD_COPY, 5, 2));
4760a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(192, default_map->LookupSecondOpcode(3, VCD_COPY, 6, 2));
4770a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(193, default_map->LookupSecondOpcode(4, VCD_COPY, 4, 2));
4780a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(194, default_map->LookupSecondOpcode(4, VCD_COPY, 5, 2));
4790a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(195, default_map->LookupSecondOpcode(4, VCD_COPY, 6, 2));
4800a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(196, default_map->LookupSecondOpcode(5, VCD_COPY, 4, 2));
4810a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(197, default_map->LookupSecondOpcode(5, VCD_COPY, 5, 2));
4820a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(198, default_map->LookupSecondOpcode(5, VCD_COPY, 6, 2));
4830a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
4840a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
4850a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondCopyMode3) {
4860a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(199, default_map->LookupSecondOpcode(2, VCD_COPY, 4, 3));
4870a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(200, default_map->LookupSecondOpcode(2, VCD_COPY, 5, 3));
4880a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(201, default_map->LookupSecondOpcode(2, VCD_COPY, 6, 3));
4890a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(202, default_map->LookupSecondOpcode(3, VCD_COPY, 4, 3));
4900a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(203, default_map->LookupSecondOpcode(3, VCD_COPY, 5, 3));
4910a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(204, default_map->LookupSecondOpcode(3, VCD_COPY, 6, 3));
4920a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(205, default_map->LookupSecondOpcode(4, VCD_COPY, 4, 3));
4930a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(206, default_map->LookupSecondOpcode(4, VCD_COPY, 5, 3));
4940a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(207, default_map->LookupSecondOpcode(4, VCD_COPY, 6, 3));
4950a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(208, default_map->LookupSecondOpcode(5, VCD_COPY, 4, 3));
4960a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(209, default_map->LookupSecondOpcode(5, VCD_COPY, 5, 3));
4970a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(210, default_map->LookupSecondOpcode(5, VCD_COPY, 6, 3));
4980a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
4990a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
5000a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondCopyMode4) {
5010a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(211, default_map->LookupSecondOpcode(2, VCD_COPY, 4, 4));
5020a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(212, default_map->LookupSecondOpcode(2, VCD_COPY, 5, 4));
5030a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(213, default_map->LookupSecondOpcode(2, VCD_COPY, 6, 4));
5040a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(214, default_map->LookupSecondOpcode(3, VCD_COPY, 4, 4));
5050a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(215, default_map->LookupSecondOpcode(3, VCD_COPY, 5, 4));
5060a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(216, default_map->LookupSecondOpcode(3, VCD_COPY, 6, 4));
5070a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(217, default_map->LookupSecondOpcode(4, VCD_COPY, 4, 4));
5080a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(218, default_map->LookupSecondOpcode(4, VCD_COPY, 5, 4));
5090a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(219, default_map->LookupSecondOpcode(4, VCD_COPY, 6, 4));
5100a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(220, default_map->LookupSecondOpcode(5, VCD_COPY, 4, 4));
5110a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(221, default_map->LookupSecondOpcode(5, VCD_COPY, 5, 4));
5120a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(222, default_map->LookupSecondOpcode(5, VCD_COPY, 6, 4));
5130a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
5140a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
5150a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondCopyMode5) {
5160a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(223, default_map->LookupSecondOpcode(2, VCD_COPY, 4, 5));
5170a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(224, default_map->LookupSecondOpcode(2, VCD_COPY, 5, 5));
5180a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(225, default_map->LookupSecondOpcode(2, VCD_COPY, 6, 5));
5190a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(226, default_map->LookupSecondOpcode(3, VCD_COPY, 4, 5));
5200a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(227, default_map->LookupSecondOpcode(3, VCD_COPY, 5, 5));
5210a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(228, default_map->LookupSecondOpcode(3, VCD_COPY, 6, 5));
5220a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(229, default_map->LookupSecondOpcode(4, VCD_COPY, 4, 5));
5230a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(230, default_map->LookupSecondOpcode(4, VCD_COPY, 5, 5));
5240a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(231, default_map->LookupSecondOpcode(4, VCD_COPY, 6, 5));
5250a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(232, default_map->LookupSecondOpcode(5, VCD_COPY, 4, 5));
5260a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(233, default_map->LookupSecondOpcode(5, VCD_COPY, 5, 5));
5270a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(234, default_map->LookupSecondOpcode(5, VCD_COPY, 6, 5));
5280a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
5290a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
5300a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondCopyMode6) {
5310a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(235, default_map->LookupSecondOpcode(2, VCD_COPY, 4, 6));
5320a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(236, default_map->LookupSecondOpcode(3, VCD_COPY, 4, 6));
5330a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(237, default_map->LookupSecondOpcode(4, VCD_COPY, 4, 6));
5340a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(238, default_map->LookupSecondOpcode(5, VCD_COPY, 4, 6));
5350a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(239, default_map->LookupSecondOpcode(2, VCD_COPY, 4, 7));
5360a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
5370a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
5380a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondCopyMode7) {
5390a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(240, default_map->LookupSecondOpcode(3, VCD_COPY, 4, 7));
5400a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(241, default_map->LookupSecondOpcode(4, VCD_COPY, 4, 7));
5410a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(242, default_map->LookupSecondOpcode(5, VCD_COPY, 4, 7));
5420a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
5430a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
5440a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondCopyMode8) {
5450a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(243, default_map->LookupSecondOpcode(2, VCD_COPY, 4, 8));
5460a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(244, default_map->LookupSecondOpcode(3, VCD_COPY, 4, 8));
5470a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(245, default_map->LookupSecondOpcode(4, VCD_COPY, 4, 8));
5480a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(246, default_map->LookupSecondOpcode(5, VCD_COPY, 4, 8));
5490a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
5500a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
5510a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, DefaultMapLookupSecondCopyInvalid) {
5520a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(2, VCD_COPY, 0, 0));
5530a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(2, VCD_COPY, 255, 0));
5540a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(2, VCD_COPY, 255, 255));
5550a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(0, VCD_COPY, 4, 0));
5560a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  EXPECT_EQ(kNoOpcode, default_map->LookupSecondOpcode(255, VCD_COPY, 4, 0));
5570a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
5580a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
5590a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan KamathTEST_F(InstructionMapTest, ExerciseTableLookup) {
5600a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  int opcode = 0;
5610a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // This loop has the same bounds as the one in SetUpTestCase.
5620a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // Look up each instruction type and make sure it returns
5630a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // the proper opcode.
5640a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  for (unsigned char inst_mode1 = 0;
5650a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath       inst_mode1 <= VCD_LAST_INSTRUCTION_TYPE + kLastExerciseMode;
5660a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath       ++inst_mode1) {
5670a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char inst1 = inst_mode1;
5680a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    unsigned char mode1 = 0;
5690a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    if (inst_mode1 > VCD_COPY) {
5700a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      inst1 = VCD_COPY;
5710a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      mode1 = inst_mode1 - VCD_COPY;
5720a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    }
5730a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    for (unsigned char inst_mode2 = 0;
5740a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath         inst_mode2 <= VCD_LAST_INSTRUCTION_TYPE + kLastExerciseMode;
5750a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath         ++inst_mode2) {
5760a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      unsigned char inst2 = inst_mode2;
5770a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      unsigned char mode2 = 0;
5780a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      if (inst_mode2 > VCD_COPY) {
5790a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath        inst2 = VCD_COPY;
5800a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath        mode2 = inst_mode2 - VCD_COPY;
5810a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      }
5820a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      if (inst2 == VCD_NOOP) {
5830a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath        VerifyExerciseFirstInstruction(opcode, inst1, 0, mode1);
5840a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath        VerifyExerciseFirstInstruction(opcode + 2,
5850a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                       inst1,
5860a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                       ((inst1 == VCD_NOOP) ? 0 : 255),
5870a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                       mode1);
5880a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      } else if (inst1 != VCD_NOOP) {
5890a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath        VerifyExerciseSecondInstruction(opcode,
5900a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        inst1,
5910a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        0,
5920a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        mode1,
5930a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        inst2,
5940a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        0,
5950a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        mode2);
5960a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath        VerifyExerciseSecondInstruction(opcode + 1,
5970a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        inst1,
5980a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        0,
5990a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        mode1,
6000a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        inst2,
6010a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        255,
6020a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        mode2);
6030a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath        VerifyExerciseSecondInstruction(opcode + 2,
6040a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        inst1,
6050a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        255,
6060a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        mode1,
6070a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        inst2,
6080a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        0,
6090a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        mode2);
6100a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath        VerifyExerciseSecondInstruction(opcode + 3,
6110a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        inst1,
6120a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        255,
6130a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        mode1,
6140a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        inst2,
6150a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        255,
6160a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath                                        mode2);
6170a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      }
6180a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath      opcode += 4;
6190a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath    }
6200a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  }
6210a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // This is a CHECK rather than an EXPECT because it validates only
6220a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  // the logic of the test, not of the code being tested.
6230a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath  CHECK_EQ(VCDiffCodeTableData::kCodeTableSize, opcode);
6240a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}
6250a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath
6260a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}  // unnamed namespace
6270a58c5c2f73e5047b36f12b5f12b12d6f2a9f69dNarayan Kamath}  // namespace open_vcdiff
628