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

Side by Side Diff: test/cctest/test-disasm-arm.cc

Issue 8939: Backport the changes from the readability. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 12 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« src/v8.h ('K') | « src/v8.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2007-2008 the V8 project authors. All rights reserved. 1 // Copyright 2007-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 static v8::Persistent<v8::Context> env; 43 static v8::Persistent<v8::Context> env;
44 44
45 static void InitializeVM() { 45 static void InitializeVM() {
46 if (env.IsEmpty()) { 46 if (env.IsEmpty()) {
47 env = v8::Context::New(); 47 env = v8::Context::New();
48 } 48 }
49 } 49 }
50 50
51 51
52 bool DisassembleAndCompare(byte* pc, const char* compare_string) { 52 bool DisassembleAndCompare(byte* pc, const char* compare_string) {
53 disasm::Disassembler disasm; 53 disasm::NameConverter converter;
54 disasm::Disassembler disasm(converter);
54 EmbeddedVector<char, 128> disasm_buffer; 55 EmbeddedVector<char, 128> disasm_buffer;
55 56
56 disasm.InstructionDecode(disasm_buffer, pc); 57 disasm.InstructionDecode(disasm_buffer, pc);
57 58
58 if (strcmp(compare_string, disasm_buffer.start()) != 0) { 59 if (strcmp(compare_string, disasm_buffer.start()) != 0) {
59 fprintf(stderr, 60 fprintf(stderr,
60 "expected: \n" 61 "expected: \n"
61 "%s\n" 62 "%s\n"
62 "disassembled: \n" 63 "disassembled: \n"
63 "%s\n\n", 64 "%s\n\n",
64 compare_string, disasm_buffer.start()); 65 compare_string, disasm_buffer.start());
65 return false; 66 return false;
66 } 67 }
67 return true; 68 return true;
68 } 69 }
69 70
70 71
72 // Setup V8 to a state where we can at least run the assembler and
73 // disassembler. Declare the variables and allocate the data structures used
74 // in the rest of the macros.
71 #define SETUP() \ 75 #define SETUP() \
72 InitializeVM(); \ 76 InitializeVM(); \
73 Serializer::disable(); \ 77 Serializer::disable(); \
74 v8::HandleScope scope; \ 78 v8::HandleScope scope; \
75 byte *buffer = reinterpret_cast<byte*>(malloc(4*1024)); \ 79 byte *buffer = reinterpret_cast<byte*>(malloc(4*1024)); \
76 Assembler assm(buffer, 4*1024); \ 80 Assembler assm(buffer, 4*1024); \
77 bool failure = false; 81 bool failure = false;
78 82
79 83
84 // This macro assembles one instruction using the preallocated assembler and
85 // disassembles the generated instruction, comparing the output to the expected
86 // value. If the comparison fails an error message is printed, but the test
87 // continues to run until the end.
80 #define COMPARE(asm_, compare_string) \ 88 #define COMPARE(asm_, compare_string) \
81 { \ 89 { \
82 int pc_offset = assm.pc_offset(); \ 90 int pc_offset = assm.pc_offset(); \
83 byte *pc = &buffer[pc_offset]; \ 91 byte *pc = &buffer[pc_offset]; \
84 assm.asm_; \ 92 assm.asm_; \
85 if (!DisassembleAndCompare(pc, compare_string)) failure = true; \ 93 if (!DisassembleAndCompare(pc, compare_string)) failure = true; \
86 } 94 }
87 95
88 96
89 #define OUTPUT() \ 97 // Verify that all invocations of the COMPARE macro passed successfully.
90 if (failure) { \ 98 // Exit with a failure if at least one of the tests failed.
99 #define VERIFY_RUN() \
100 if (failure) { \
91 V8_Fatal(__FILE__, __LINE__, "ARM Disassembler tests failed.\n"); \ 101 V8_Fatal(__FILE__, __LINE__, "ARM Disassembler tests failed.\n"); \
92 } 102 }
93 103
94 104
95 TEST(Type0) { 105 TEST(Type0) {
96 SETUP(); 106 SETUP();
97 107
98 COMPARE(and_(r0, r1, Operand(r2)), 108 COMPARE(and_(r0, r1, Operand(r2)),
99 "e0010002 and r0, r1, r2"); 109 "e0010002 and r0, r1, r2");
100 COMPARE(and_(r1, r2, Operand(r3), LeaveCC), 110 COMPARE(and_(r1, r2, Operand(r3), LeaveCC),
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 242
233 COMPARE(mvn(r10, Operand(r1)), 243 COMPARE(mvn(r10, Operand(r1)),
234 "e1e0a001 mvn sl, r1"); 244 "e1e0a001 mvn sl, r1");
235 COMPARE(mvn(r9, Operand(r2)), 245 COMPARE(mvn(r9, Operand(r2)),
236 "e1e09002 mvn r9, r2"); 246 "e1e09002 mvn r9, r2");
237 COMPARE(mvn(r0, Operand(r3), SetCC), 247 COMPARE(mvn(r0, Operand(r3), SetCC),
238 "e1f00003 mvns r0, r3"); 248 "e1f00003 mvns r0, r3");
239 COMPARE(mvn(r5, Operand(r4), SetCC, cc), 249 COMPARE(mvn(r5, Operand(r4), SetCC, cc),
240 "31f05004 mvnccs r5, r4"); 250 "31f05004 mvnccs r5, r4");
241 251
242 OUTPUT(); 252 VERIFY_RUN();
243 } 253 }
244 254
245 255
246 TEST(Type1) { 256 TEST(Type1) {
247 SETUP(); 257 SETUP();
248 258
249 COMPARE(and_(r0, r1, Operand(0x00000000)), 259 COMPARE(and_(r0, r1, Operand(0x00000000)),
250 "e2010000 and r0, r1, #0"); 260 "e2010000 and r0, r1, #0");
251 COMPARE(and_(r1, r2, Operand(0x00000001), LeaveCC), 261 COMPARE(and_(r1, r2, Operand(0x00000001), LeaveCC),
252 "e2021001 and r1, r2, #1"); 262 "e2021001 and r1, r2, #1");
253 COMPARE(and_(r2, r3, Operand(0x00000010), SetCC), 263 COMPARE(and_(r2, r3, Operand(0x00000010), SetCC),
254 "e2132010 ands r2, r3, #16"); 264 "e2132010 ands r2, r3, #16");
255 COMPARE(and_(r3, r4, Operand(0x00000100), LeaveCC, eq), 265 COMPARE(and_(r3, r4, Operand(0x00000100), LeaveCC, eq),
256 "02043c01 andeq r3, r4, #256"); 266 "02043c01 andeq r3, r4, #256");
257 COMPARE(and_(r4, r5, Operand(0x00001000), SetCC, ne), 267 COMPARE(and_(r4, r5, Operand(0x00001000), SetCC, ne),
258 "12154a01 andnes r4, r5, #4096"); 268 "12154a01 andnes r4, r5, #4096");
259 269
260 COMPARE(eor(r4, r5, Operand(0x00001000)), 270 COMPARE(eor(r4, r5, Operand(0x00001000)),
261 "e2254a01 eor r4, r5, #4096"); 271 "e2254a01 eor r4, r5, #4096");
262 COMPARE(eor(r4, r4, Operand(0x00010000), LeaveCC), 272 COMPARE(eor(r4, r4, Operand(0x00010000), LeaveCC),
263 "e2244801 eor r4, r4, #65536"); 273 "e2244801 eor r4, r4, #65536");
264 COMPARE(eor(r4, r3, Operand(0x00100000), SetCC), 274 COMPARE(eor(r4, r3, Operand(0x00100000), SetCC),
265 "e2334601 eors r4, r3, #1048576"); 275 "e2334601 eors r4, r3, #1048576");
266 COMPARE(eor(r4, r2, Operand(0x01000000), LeaveCC, cs), 276 COMPARE(eor(r4, r2, Operand(0x01000000), LeaveCC, cs),
267 "22224401 eorcs r4, r2, #16777216"); 277 "22224401 eorcs r4, r2, #16777216");
268 COMPARE(eor(r4, r1, Operand(0x10000000), SetCC, cc), 278 COMPARE(eor(r4, r1, Operand(0x10000000), SetCC, cc),
269 "32314201 eorccs r4, r1, #268435456"); 279 "32314201 eorccs r4, r1, #268435456");
270 280
271 OUTPUT(); 281 VERIFY_RUN();
272 } 282 }
OLDNEW
« src/v8.h ('K') | « src/v8.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698