| Index: tools/traceline/traceline/assembler_unittest.cc
|
| diff --git a/tools/traceline/traceline/assembler_unittest.cc b/tools/traceline/traceline/assembler_unittest.cc
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..e2c17b66012062aa9824c0ee97aea7250fc91417
|
| --- /dev/null
|
| +++ b/tools/traceline/traceline/assembler_unittest.cc
|
| @@ -0,0 +1,83 @@
|
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include <stdio.h>
|
| +
|
| +#include "assembler.h"
|
| +
|
| +int main(int argc, char** argv) {
|
| + char buf[1024];
|
| +
|
| + CodeBuffer cb(buf);
|
| +
|
| + // Branching tests first so the offsets are not always adjusting in the
|
| + // output diassembler when we add new tests.
|
| +
|
| + cb.spin();
|
| +
|
| + cb.call(EAX);
|
| + cb.call(Operand(EAX));
|
| + cb.call(Operand(EDX, 15));
|
| +
|
| + cb.fs(); cb.mov(EAX, Operand(3));
|
| + cb.fs(); cb.mov(EDX, Operand(0x04));
|
| +
|
| + cb.lea(EAX, Operand(EAX));
|
| + cb.lea(EAX, Operand(0x12345678));
|
| + cb.lea(EAX, Operand(EBX, 0x12345678));
|
| + cb.lea(EAX, Operand(EBX, ECX, SCALE_TIMES_2, 0x12345678));
|
| + cb.lea(EAX, Operand(ECX, SCALE_TIMES_2, 0x12345678));
|
| + cb.lea(EAX, Operand(EAX, SCALE_TIMES_2, 0));
|
| + cb.lea(EAX, Operand(EBX, SCALE_TIMES_2, 0));
|
| + cb.lea(EBP, Operand(EBP, SCALE_TIMES_2, 1));
|
| +
|
| + cb.lodsb();
|
| + cb.lodsd();
|
| +
|
| + cb.mov(EAX, ECX);
|
| + cb.mov(ESI, ESP);
|
| + cb.mov(EAX, Operand(ESP, 0x20));
|
| + cb.mov(EAX, Operand(EBP, 8));
|
| + cb.mov_imm(ESP, 1);
|
| + cb.mov_imm(EAX, 0x12345678);
|
| +
|
| + cb.pop(EBX);
|
| + cb.pop(Operand(EBX));
|
| + cb.pop(Operand(EBX, 0));
|
| + cb.pop(Operand(EBX, 12));
|
| +
|
| + cb.push(EBX);
|
| + cb.push(Operand(EBX));
|
| + cb.push(Operand(EBX, 0));
|
| + cb.push(Operand(EDI, -4));
|
| + cb.push(Operand(EDI, -8));
|
| + cb.push_imm(0x12);
|
| + cb.push_imm(0x1234);
|
| + cb.push(Operand(EBX, 12));
|
| + cb.push(Operand(ESP, 0x1234));
|
| +
|
| + cb.ret();
|
| + cb.ret(0);
|
| + cb.ret(12);
|
| +
|
| + cb.stosb();
|
| + cb.stosd();
|
| +
|
| + cb.sysenter();
|
| +
|
| + cb.which_cpu();
|
| + cb.which_thread();
|
| +
|
| + cb.xchg(EAX, EAX);
|
| + cb.xchg(EBX, EAX);
|
| + cb.xchg(EAX, EBX);
|
| + cb.xchg(ECX, ESP);
|
| + cb.xchg(ECX, Operand(ESP));
|
| + cb.xchg(ECX, Operand(ESP, 5));
|
| + cb.xchg(ECX, Operand(EDX, 4));
|
| +
|
| + fwrite(buf, 1, cb.size(), stdout);
|
| +
|
| + return 0;
|
| +}
|
|
|