Mercurial > projects > ldc
annotate gen/asm-x86-64.h @ 1317:4099548c80e0
Allocate objects on the stack if they (a) don't have a destructor, and
(b) don't override the delete operator (on top of the regular conditions for
stack allocation that also apply to arrays, structs, etc.).
The "no destructor" clause is not strictly necessary, but calling them at the
right time would be tricky to say the least; it would involve, among other
things, "manually" inserting a try-finally block around anything that might
throw exceptions not caught in the current function.
Note: objects with custom new operators are automatically ignored because they
don't use the regular allocation runtime call, so there's no need to pay special
attention to them.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Sat, 09 May 2009 00:50:15 +0200 |
parents | 85b80c4fe48a |
children | 1ad5a58b5c9d |
rev | line source |
---|---|
304 | 1 // Taken from GDC source tree. Original by David Friedman. |
2 // Released under the Artistic License found in dmd/artistic.txt | |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3 |
751
dc8b8b7ea0c1
Fix compile-time warnings. Adjust include in d-asm-i386.
Christian Kamm <kamm incasoftware de>
parents:
468
diff
changeset
|
4 #include "id.h" |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
5 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
6 namespace AsmParserx8664 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
7 { |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
8 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
9 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
10 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
11 Reg_Invalid = -1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
12 Reg_EAX = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
13 Reg_EBX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
14 Reg_ECX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
15 Reg_EDX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
16 Reg_ESI, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
17 Reg_EDI, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
18 Reg_EBP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
19 Reg_ESP, |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
20 Reg_ST, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
21 Reg_ST1, Reg_ST2, Reg_ST3, Reg_ST4, Reg_ST5, Reg_ST6, Reg_ST7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
22 Reg_MM0, Reg_MM1, Reg_MM2, Reg_MM3, Reg_MM4, Reg_MM5, Reg_MM6, Reg_MM7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
23 Reg_XMM0, Reg_XMM1, Reg_XMM2, Reg_XMM3, Reg_XMM4, Reg_XMM5, Reg_XMM6, Reg_XMM7, |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
24 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
25 Reg_RAX, Reg_RBX, Reg_RCX, Reg_RDX, Reg_RSI, Reg_RDI, Reg_RBP, Reg_RSP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
26 Reg_R8, Reg_R9, Reg_R10, Reg_R11, Reg_R12, Reg_R13, Reg_R14, Reg_R15, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
27 Reg_R8B, Reg_R9B, Reg_R10B, Reg_R11B, Reg_R12B, Reg_R13B, Reg_R14B, Reg_R15B, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
28 Reg_R8W, Reg_R9W, Reg_R10W, Reg_R11W, Reg_R12W, Reg_R13W, Reg_R14W, Reg_R15W, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
29 Reg_R8D, Reg_R9D, Reg_R10D, Reg_R11D, Reg_R12D, Reg_R13D, Reg_R14D, Reg_R15D, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
30 Reg_XMM8, Reg_XMM9, Reg_XMM10, Reg_XMM11, Reg_XMM12, Reg_XMM13, Reg_XMM14, Reg_XMM15, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
31 Reg_RIP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
32 Reg_SIL, Reg_DIL, Reg_BPL, Reg_SPL, |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
33 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
34 Reg_EFLAGS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
35 Reg_CS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
36 Reg_DS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
37 Reg_SS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
38 Reg_ES, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
39 Reg_FS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
40 Reg_GS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
41 Reg_AX, Reg_BX, Reg_CX, Reg_DX, Reg_SI, Reg_DI, Reg_BP, Reg_SP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
42 Reg_AL, Reg_AH, Reg_BL, Reg_BH, Reg_CL, Reg_CH, Reg_DL, Reg_DH, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
43 Reg_CR0, Reg_CR2, Reg_CR3, Reg_CR4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
44 Reg_DR0, Reg_DR1, Reg_DR2, Reg_DR3, Reg_DR6, Reg_DR7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
45 Reg_TR3, Reg_TR4, Reg_TR5, Reg_TR6, Reg_TR7 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
46 } Reg; |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
47 |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
48 static const int N_Regs = /*gp*/ 8 + /*fp*/ 8 + /*mmx*/ 8 + /*sse*/ 8 + |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
49 /*seg*/ 6 + /*16bit*/ 8 + /*8bit*/ 8 + /*sys*/ 4+6+5 + /*flags*/ + 1 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
50 + 8 /*RAX, etc*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
51 + 8 /*R8-15*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
52 + 4 /*SIL, etc. 8-bit*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
53 + 8 /*R8-15B*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
54 + 8 /*R8-15W*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
55 + 8 /*R8-15D*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
56 + 8 /*XMM8-15*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
57 + 1 /*RIP*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
58 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
59 ; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
60 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
61 #define NULL_TREE "" |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
62 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
63 static struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
64 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
65 const char * name; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
66 std::string gccName; // GAS will take upper case, but GCC won't (needed for the clobber list) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
67 Identifier * ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
68 char size; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
69 char baseReg; // %% todo: Reg, Reg_XX |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
70 } regInfo[N_Regs] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
71 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
72 { "EAX", NULL_TREE, NULL, 4, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
73 { "EBX", NULL_TREE, NULL, 4, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
74 { "ECX", NULL_TREE, NULL, 4, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
75 { "EDX", NULL_TREE, NULL, 4, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
76 { "ESI", NULL_TREE, NULL, 4, Reg_ESI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
77 { "EDI", NULL_TREE, NULL, 4, Reg_EDI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
78 { "EBP", NULL_TREE, NULL, 4, Reg_EBP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
79 { "ESP", NULL_TREE, NULL, 4, Reg_ESP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
80 { "ST", NULL_TREE, NULL, 10, Reg_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
81 { "ST(1)", NULL_TREE, NULL,10, Reg_ST1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
82 { "ST(2)", NULL_TREE, NULL,10, Reg_ST2 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
83 { "ST(3)", NULL_TREE, NULL,10, Reg_ST3 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
84 { "ST(4)", NULL_TREE, NULL,10, Reg_ST4 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
85 { "ST(5)", NULL_TREE, NULL,10, Reg_ST5 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
86 { "ST(6)", NULL_TREE, NULL,10, Reg_ST6 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
87 { "ST(7)", NULL_TREE, NULL,10, Reg_ST7 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
88 { "MM0", NULL_TREE, NULL, 8, Reg_MM0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
89 { "MM1", NULL_TREE, NULL, 8, Reg_MM1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
90 { "MM2", NULL_TREE, NULL, 8, Reg_MM2 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
91 { "MM3", NULL_TREE, NULL, 8, Reg_MM3 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
92 { "MM4", NULL_TREE, NULL, 8, Reg_MM4 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
93 { "MM5", NULL_TREE, NULL, 8, Reg_MM5 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
94 { "MM6", NULL_TREE, NULL, 8, Reg_MM6 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
95 { "MM7", NULL_TREE, NULL, 8, Reg_MM7 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
96 { "XMM0", NULL_TREE, NULL, 16, Reg_XMM0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
97 { "XMM1", NULL_TREE, NULL, 16, Reg_XMM1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
98 { "XMM2", NULL_TREE, NULL, 16, Reg_XMM2 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
99 { "XMM3", NULL_TREE, NULL, 16, Reg_XMM3 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
100 { "XMM4", NULL_TREE, NULL, 16, Reg_XMM4 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
101 { "XMM5", NULL_TREE, NULL, 16, Reg_XMM5 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
102 { "XMM6", NULL_TREE, NULL, 16, Reg_XMM6 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
103 { "XMM7", NULL_TREE, NULL, 16, Reg_XMM7 }, |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
104 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
105 { "RAX", NULL_TREE, NULL, 8, Reg_RAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
106 { "RBX", NULL_TREE, NULL, 8, Reg_RBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
107 { "RCX", NULL_TREE, NULL, 8, Reg_RCX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
108 { "RDX", NULL_TREE, NULL, 8, Reg_RDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
109 { "RSI", NULL_TREE, NULL, 8, Reg_RSI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
110 { "RDI", NULL_TREE, NULL, 8, Reg_RDI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
111 { "RBP", NULL_TREE, NULL, 8, Reg_RBP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
112 { "RSP", NULL_TREE, NULL, 8, Reg_RSP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
113 { "R8", NULL_TREE, NULL, 8, Reg_R8 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
114 { "R9", NULL_TREE, NULL, 8, Reg_R9 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
115 { "R10", NULL_TREE, NULL, 8, Reg_R10 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
116 { "R11", NULL_TREE, NULL, 8, Reg_R11 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
117 { "R12", NULL_TREE, NULL, 8, Reg_R12 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
118 { "R13", NULL_TREE, NULL, 8, Reg_R13 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
119 { "R14", NULL_TREE, NULL, 8, Reg_R14 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
120 { "R15", NULL_TREE, NULL, 8, Reg_R15 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
121 { "R8B", NULL_TREE, NULL, 1, Reg_R8 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
122 { "R9B", NULL_TREE, NULL, 1, Reg_R9 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
123 { "R10B", NULL_TREE, NULL, 1, Reg_R10 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
124 { "R11B", NULL_TREE, NULL, 1, Reg_R11 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
125 { "R12B", NULL_TREE, NULL, 1, Reg_R12 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
126 { "R13B", NULL_TREE, NULL, 1, Reg_R13 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
127 { "R14B", NULL_TREE, NULL, 1, Reg_R14 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
128 { "R15B", NULL_TREE, NULL, 1, Reg_R15 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
129 { "R8W", NULL_TREE, NULL, 2, Reg_R8 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
130 { "R9W", NULL_TREE, NULL, 2, Reg_R9 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
131 { "R10W", NULL_TREE, NULL, 2, Reg_R10 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
132 { "R11W", NULL_TREE, NULL, 2, Reg_R11 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
133 { "R12W", NULL_TREE, NULL, 2, Reg_R12 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
134 { "R13W", NULL_TREE, NULL, 2, Reg_R13 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
135 { "R14W", NULL_TREE, NULL, 2, Reg_R14 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
136 { "R15W", NULL_TREE, NULL, 2, Reg_R15 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
137 { "R8D", NULL_TREE, NULL, 4, Reg_R8 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
138 { "R9D", NULL_TREE, NULL, 4, Reg_R9 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
139 { "R10D", NULL_TREE, NULL, 4, Reg_R10 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
140 { "R11D", NULL_TREE, NULL, 4, Reg_R11 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
141 { "R12D", NULL_TREE, NULL, 4, Reg_R12 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
142 { "R13D", NULL_TREE, NULL, 4, Reg_R13 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
143 { "R14D", NULL_TREE, NULL, 4, Reg_R14 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
144 { "R15D", NULL_TREE, NULL, 4, Reg_R15 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
145 { "XMM8", NULL_TREE, NULL, 16, Reg_XMM8 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
146 { "XMM9", NULL_TREE, NULL, 16, Reg_XMM9 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
147 { "XMM10", NULL_TREE, NULL, 16, Reg_XMM10 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
148 { "XMM11", NULL_TREE, NULL, 16, Reg_XMM11 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
149 { "XMM12", NULL_TREE, NULL, 16, Reg_XMM12 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
150 { "XMM13", NULL_TREE, NULL, 16, Reg_XMM13 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
151 { "XMM14", NULL_TREE, NULL, 16, Reg_XMM14 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
152 { "XMM15", NULL_TREE, NULL, 16, Reg_XMM15 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
153 { "RIP", NULL_TREE, NULL, 8, Reg_RIP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
154 { "SIL", NULL_TREE, NULL, 1, Reg_SIL }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
155 { "DIL", NULL_TREE, NULL, 1, Reg_DIL }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
156 { "BPL", NULL_TREE, NULL, 1, Reg_BPL }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
157 { "SPL", NULL_TREE, NULL, 1, Reg_SPL }, |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
158 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
159 { "FLAGS", NULL_TREE, NULL, 0, Reg_EFLAGS }, // the gcc name is "flags"; not used in assembler input |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
160 { "CS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
161 { "DS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
162 { "SS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
163 { "ES", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
164 { "FS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
165 { "GS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
166 { "AX", NULL_TREE, NULL, 2, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
167 { "BX", NULL_TREE, NULL, 2, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
168 { "CX", NULL_TREE, NULL, 2, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
169 { "DX", NULL_TREE, NULL, 2, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
170 { "SI", NULL_TREE, NULL, 2, Reg_ESI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
171 { "DI", NULL_TREE, NULL, 2, Reg_EDI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
172 { "BP", NULL_TREE, NULL, 2, Reg_EBP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
173 { "SP", NULL_TREE, NULL, 2, Reg_ESP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
174 { "AL", NULL_TREE, NULL, 1, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
175 { "AH", NULL_TREE, NULL, 1, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
176 { "BL", NULL_TREE, NULL, 1, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
177 { "BH", NULL_TREE, NULL, 1, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
178 { "CL", NULL_TREE, NULL, 1, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
179 { "CH", NULL_TREE, NULL, 1, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
180 { "DL", NULL_TREE, NULL, 1, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
181 { "DH", NULL_TREE, NULL, 1, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
182 { "CR0", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
183 { "CR2", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
184 { "CR3", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
185 { "CR4", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
186 { "DR0", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
187 { "DR1", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
188 { "DR2", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
189 { "DR3", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
190 { "DR6", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
191 { "DR7", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
192 { "TR3", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
193 { "TR4", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
194 { "TR5", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
195 { "TR6", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
196 { "TR7", NULL_TREE, NULL, 0, -1 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
197 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
198 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
199 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
200 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
201 No_Type_Needed, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
202 Int_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
203 Word_Types, // same as Int_Types, but byte is not allowed |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
204 FP_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
205 FPInt_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
206 Byte_NoType, // byte only, but no type suffix |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
207 } TypeNeeded; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
208 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
209 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
210 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
211 No_Link, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
212 Out_Mnemonic, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
213 Next_Form |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
214 } OpLink; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
215 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
216 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
217 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
218 Clb_SizeAX = 0x01, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
219 Clb_SizeDXAX = 0x02, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
220 Clb_EAX = 0x03, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
221 Clb_DXAX_Mask = 0x03, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
222 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
223 Clb_Flags = 0x04, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
224 Clb_DI = 0x08, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
225 Clb_SI = 0x10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
226 Clb_CX = 0x20, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
227 Clb_ST = 0x40, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
228 Clb_SP = 0x80 // Doesn't actually let GCC know the frame pointer is modified |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
229 } ImplicitClober; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
230 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
231 // "^ +/..\([A-Za-z_0-9]+\).*" -> " \1," |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
232 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
233 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
234 Op_Invalid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
235 Op_Adjust, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
236 Op_Dst, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
237 Op_Upd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
238 Op_DstW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
239 Op_DstF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
240 Op_UpdF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
241 Op_DstSrc, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
242 Op_DstSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
243 Op_UpdSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
244 Op_DstSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
245 Op_UpdSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
246 Op_DstSrcSSE, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
247 Op_DstSrcMMX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
248 Op_DstSrcImmS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
249 Op_DstSrcImmM, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
250 Op_UpdSrcShft, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
251 Op_DstSrcNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
252 Op_UpdSrcNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
253 Op_DstMemNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
254 Op_DstRMBNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
255 Op_DstRMWNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
256 Op_UpdUpd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
257 Op_UpdUpdF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
258 Op_Src, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
259 Op_SrcRMWNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
260 Op_SrcW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
261 Op_SrcImm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
262 Op_Src_DXAXF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
263 Op_SrcMemNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
264 Op_SrcMemNTF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
265 Op_SrcSrc, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
266 Op_SrcSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
267 Op_SrcSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
268 Op_SrcSrcSSEF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
269 Op_SrcSrcMMX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
270 Op_Shift, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
271 Op_Branch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
272 Op_CBranch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
273 Op_0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
274 Op_0_AX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
275 Op_0_DXAX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
276 Op_Loop, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
277 Op_Flags, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
278 Op_F0_ST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
279 Op_F0_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
280 Op_Fs_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
281 Op_Fis, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
282 Op_Fis_ST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
283 Op_Fis_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
284 Op_Fid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
285 Op_Fid_P, |
1083
c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1078
diff
changeset
|
286 Op_FidR_P, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
287 Op_Ffd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
288 Op_FfdR, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
289 Op_Ffd_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
290 Op_FfdR_P, |
1058
8bc277ef23a5
Applied rev two operand form fstp fix to x86-64 asm
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1053
diff
changeset
|
291 Op_FfdRR_P, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
292 Op_Fd_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
293 Op_FdST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
294 Op_FMath, |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
295 Op_FMath0, |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
296 Op_FMath2, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
297 Op_FdSTiSTi, |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
298 Op_FdST0ST1, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
299 Op_FPMath, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
300 Op_FCmp, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
301 Op_FCmp1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
302 Op_FCmpP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
303 Op_FCmpP1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
304 Op_FCmpFlg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
305 Op_FCmpFlgP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
306 Op_fld, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
307 Op_fldR, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
308 Op_fxch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
309 Op_fxch1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
310 Op_fxch0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
311 Op_SizedStack, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
312 Op_bound, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
313 Op_bswap, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
314 Op_cmps, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
315 Op_cmpsd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
316 Op_cmpsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
317 Op_cmpxchg8b, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
318 Op_cmpxchg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
319 Op_cpuid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
320 Op_enter, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
321 Op_fdisi, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
322 Op_feni, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
323 Op_fsetpm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
324 Op_fXstsw, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
325 Op_imul, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
326 Op_imul2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
327 Op_imul1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
328 Op_in, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
329 Op_ins, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
330 Op_insX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
331 Op_iret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
332 Op_iretd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
333 Op_lods, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
334 Op_lodsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
335 Op_movs, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
336 Op_movsd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
337 Op_movsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
338 Op_movsx, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
339 Op_movzx, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
340 Op_mul, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
341 Op_out, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
342 Op_outs, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
343 Op_outsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
344 Op_push, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
345 Op_ret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
346 Op_retf, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
347 Op_scas, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
348 Op_scasX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
349 Op_stos, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
350 Op_stosX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
351 Op_xlat, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
352 N_AsmOpInfo, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
353 Op_Align, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
354 Op_Even, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
355 Op_Naked, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
356 Op_db, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
357 Op_ds, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
358 Op_di, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
359 Op_dl, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
360 Op_df, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
361 Op_dd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
362 Op_de |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
363 } AsmOp; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
364 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
365 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
366 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
367 Opr_None = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
368 OprC_MRI = 1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
369 OprC_MR = 2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
370 OprC_Mem = 3, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
371 OprC_Reg = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
372 OprC_Imm = 5, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
373 OprC_SSE = 6, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
374 OprC_SSE_Mem = 7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
375 OprC_R32 = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
376 OprC_RWord = 9, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
377 OprC_RFP = 10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
378 OprC_AbsRel = 11, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
379 OprC_Relative = 12, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
380 OprC_Port = 13, // DX or imm |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
381 OprC_AX = 14, // AL,AX,EAX |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
382 OprC_DX = 15, // only DX |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
383 OprC_MMX = 16, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
384 OprC_MMX_Mem = 17, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
385 OprC_Shift = 18, // imm or CL |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
386 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
387 Opr_ClassMask = 0x1f, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
388 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
389 Opr_Dest = 0x20, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
390 Opr_Update = 0x60, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
391 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
392 Opr_NoType = 0x80, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
393 } OprVals; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
394 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
395 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
396 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
397 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
398 } AsmOprInfo; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
399 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
400 typedef unsigned char Opr; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
401 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
402 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
403 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
404 Opr operands[3]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
405 unsigned char |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
406 needsType : 3, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
407 implicitClobbers : 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
408 linkType : 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
409 unsigned link; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
410 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
411 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
412 bool takesLabel() { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
413 return operands[0] & Opr_Label; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
414 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
415 */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
416 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
417 unsigned nOperands() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
418 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
419 if ( !operands[0] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
420 return 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
421 else if ( !operands[1] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
422 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
423 else if ( !operands[2] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
424 return 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
425 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
426 return 3; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
427 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
428 } AsmOpInfo; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
429 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
430 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
431 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
432 Mn_fdisi, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
433 Mn_feni, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
434 Mn_fsetpm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
435 Mn_iretw, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
436 Mn_iret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
437 Mn_lret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
438 Mn_cmpxchg8b, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
439 N_AltMn |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
440 } Alternate_Mnemonics; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
441 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
442 static const char * alternateMnemonics[N_AltMn] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
443 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
444 ".byte 0xdb, 0xe1", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
445 ".byte 0xdb, 0xe0", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
446 ".byte 0xdb, 0xe4", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
447 "iretw", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
448 "iret", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
449 "lret", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
450 "cmpxchg8b" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
451 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
452 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
453 #define mri OprC_MRI |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
454 #define mr OprC_MR |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
455 #define mem OprC_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
456 // for now mfp=mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
457 #define mfp OprC_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
458 #define reg OprC_Reg |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
459 #define imm OprC_Imm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
460 #define sse OprC_SSE |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
461 #define ssem OprC_SSE_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
462 #define mmx OprC_MMX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
463 #define mmxm OprC_MMX_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
464 #define r32 OprC_R32 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
465 #define rw OprC_RWord |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
466 #define rfp OprC_RFP |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
467 #define port OprC_Port |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
468 #define ax OprC_AX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
469 #define dx OprC_DX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
470 #define shft OprC_Shift |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
471 #define D Opr_Dest |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
472 #define U Opr_Update |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
473 #define N Opr_NoType |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
474 //#define L Opr_Label |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
475 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
476 // D=dest, N=notype |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
477 static AsmOpInfo asmOpInfo[N_AsmOpInfo] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
478 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
479 /* Op_Invalid */ {}, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
480 /* Op_Adjust */ { 0,0,0, 0, Clb_EAX /*just AX*/ }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
481 /* Op_Dst */ { D|mr, 0, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
482 /* Op_Upd */ { U|mr, 0, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
483 /* Op_DstW */ { D|mr, 0, 0, Word_Types }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
484 /* Op_DstF */ { D|mr, 0, 0, 1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
485 /* Op_UpdF */ { U|mr, 0, 0, 1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
486 /* Op_DstSrc */ { D|mr, mri, 0,/**/1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
487 /* Op_DstSrcF */ { D|mr, mri, 0,/**/1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
488 /* Op_UpdSrcF */ { U|mr, mri, 0,/**/1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
489 /* Op_DstSrcFW */ { D|mr, mri, 0,/**/Word_Types, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
490 /* Op_UpdSrcFW */ { U|mr, mri, 0,/**/Word_Types, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
491 /* Op_DstSrcSSE */ { U|sse, ssem, 0 }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
492 /* Op_DstSrcMMX */ { U|mmx, mmxm, 0 }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
493 /* Op_DstSrcImmS*/ { U|sse, ssem, N|imm }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
494 /* Op_DstSrcImmM*/ { U|mmx, mmxm, N|imm }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
495 /* Op_UpdSrcShft*/ { U|mr, reg, N|shft, 1, Clb_Flags }, // 16/32 only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
496 /* Op_DstSrcNT */ { D|mr, mr, 0, 0 }, // used for movd .. operands can be rm32,sse,mmx |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
497 /* Op_UpdSrcNT */ { U|mr, mr, 0, 0 }, // used for movd .. operands can be rm32,sse,mmx |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
498 /* Op_DstMemNT */ { D|mem, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
499 /* Op_DstRMBNT */ { D|mr, 0, 0, Byte_NoType }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
500 /* Op_DstRMWNT */ { D|mr, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
501 /* Op_UpdUpd */ { U|mr,U|mr, 0,/**/1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
502 /* Op_UpdUpdF */ { U|mr,U|mr, 0,/**/1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
503 /* Op_Src */ { mri, 0, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
504 /* Op_SrcRMWNT */ { mr, 0, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
505 /* Op_SrcW */ { mri, 0, 0, Word_Types }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
506 /* Op_SrcImm */ { imm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
507 /* Op_Src_DXAXF */ { mr, 0, 0, 1, Clb_SizeDXAX|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
508 /* Op_SrcMemNT */ { mem, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
509 /* Op_SrcMemNTF */ { mem, 0, 0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
510 /* Op_SrcSrc */ { mr, mri, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
511 /* Op_SrcSrcF */ { mr, mri, 0, 1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
512 /* Op_SrcSrcFW */ { mr, mri, 0, Word_Types, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
513 /* Op_SrcSrcSSEF*/ { sse, ssem, 0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
514 /* Op_SrcSrcMMX */ { mmx, mmx, 0, }, |
961
f33413a955fa
Fix shl/r bad operand size error
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
944
diff
changeset
|
515 /* Op_Shift */ { D|mr,N|shft, 0,/**/0, Clb_Flags }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
516 /* Op_Branch */ { mri }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
517 /* Op_CBranch */ { imm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
518 /* Op_0 */ { 0,0,0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
519 /* Op_0_AX */ { 0,0,0, 0, Clb_SizeAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
520 /* Op_0_DXAX */ { 0,0,0, 0, Clb_SizeDXAX }, // but for cwd/cdq -- how do know the size.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
521 /* Op_Loop */ { imm, 0, 0, 0, Clb_CX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
522 /* Op_Flags */ { 0,0,0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
523 /* Op_F0_ST */ { 0,0,0, 0, Clb_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
524 /* Op_F0_P */ { 0,0,0, 0, Clb_ST }, // push, pops, etc. not sure how to inform gcc.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
525 /* Op_Fs_P */ { mem, 0, 0, 0, Clb_ST }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
526 /* Op_Fis */ { mem, 0, 0, FPInt_Types }, // only 16bit and 32bit, DMD defaults to 16bit |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
527 /* Op_Fis_ST */ { mem, 0, 0, FPInt_Types, Clb_ST }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
528 /* Op_Fis_P */ { mem, 0, 0, FPInt_Types, Clb_ST }, // push and pop, fild so also 64 bit |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
529 /* Op_Fid */ { D|mem, 0, 0, FPInt_Types }, // only 16bit and 32bit, DMD defaults to 16bit |
1085
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
530 /* Op_Fid_P */ { D|mem, 0, 0, FPInt_Types, Clb_ST, Next_Form, Op_FidR_P }, // push and pop, fild so also 64 bit |
1100
b3a0cf072ed0
Fix an error in the ASM tables introduced by the recent fistp fixes.
Frits van Bommel <fvbommel wxs.nl>
parents:
1098
diff
changeset
|
531 /* Op_FidR_P */ { D|mem,rfp, 0, FPInt_Types, Clb_ST }, // push and pop, fild so also 64 bit |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
532 /* Op_Ffd */ { D|mfp, 0, 0, FP_Types, 0, Next_Form, Op_FfdR }, // only 16bit and 32bit, DMD defaults to 16bit, reg form doesn't need type |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
533 /* Op_FfdR */ { D|rfp, 0, 0 }, |
1058
8bc277ef23a5
Applied rev two operand form fstp fix to x86-64 asm
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1053
diff
changeset
|
534 /* Op_Ffd_P */ { D|mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_FfdR_P }, // pop, fld so also 80 bit, " |
8bc277ef23a5
Applied rev two operand form fstp fix to x86-64 asm
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1053
diff
changeset
|
535 /* Op_FfdR_P */ { D|rfp, 0, 0, 0, Clb_ST, Next_Form, Op_FfdRR_P }, |
1108
d03814546977
Apply r1106 to x86-64 asm too
Frits van Bommel <fvbommel wxs.nl>
parents:
1102
diff
changeset
|
536 /* Op_FfdRR_P */ { D|rfp,rfp, 0, 0, Clb_ST }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
537 /* Op_Fd_P */ { D|mem, 0, 0, 0, Clb_ST }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
538 /* Op_FdST */ { D|rfp, 0, 0 }, |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
539 /* Op_FMath */ { mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_FMath0 }, // and only single or double prec |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
540 /* Op_FMath0 */ { 0, 0, 0, 0, Clb_ST, Next_Form, Op_FMath2 }, // pops |
1101
8bf8b058944a
Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents:
1100
diff
changeset
|
541 /* Op_FMath2 */ { D|rfp, rfp, 0, 0, Clb_ST, Next_Form, Op_FdST0ST1 }, // and only single or double prec |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
542 /* Op_FdSTiSTi */ { D|rfp, rfp, 0, }, |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
543 /* Op_FdST0ST1 */ { 0, 0, 0, }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
544 /* Op_FPMath */ { D|rfp, rfp, 0, 0, Clb_ST, Next_Form, Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
545 /* Op_FCmp */ { mfp, 0, 0, FP_Types, 0, Next_Form, Op_FCmp1 }, // DMD defaults to float ptr |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
546 /* Op_FCmp1 */ { rfp, 0, 0, 0, 0, Next_Form, Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
547 /* Op_FCmpP */ { mfp, 0, 0, FP_Types, 0, Next_Form, Op_FCmpP1 }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
548 /* Op_FCmpP1 */ { rfp, 0, 0, 0, 0, Next_Form, Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
549 /* Op_FCmpFlg */ { rfp, rfp, 0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
550 /* Op_FCmpFlgP */ { rfp, rfp, 0, 0, Clb_Flags }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
551 /* Op_fld */ { mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_fldR }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
552 /* Op_fldR */ { rfp, 0, 0, 0, Clb_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
553 /* Op_fxch */ { D|rfp,D|rfp, 0, 0, Clb_ST, Next_Form, Op_fxch1 }, // not in intel manual?, but DMD allows it (gas won't), second arg must be ST |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
554 /* Op_fxch1 */ { D|rfp, 0, 0, 0, Clb_ST, Next_Form, Op_fxch0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
555 /* Op_fxch0 */ { 0, 0, 0, 0, Clb_ST }, // Also clobbers ST(1) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
556 /* Op_SizedStack*/ { 0, 0, 0, 0, Clb_SP }, // type suffix special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
557 /* Op_bound */ { mr, mri, 0, Word_Types }, // operands *not* reversed for gas |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
558 /* Op_bswap */ { D|r32 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
559 /* Op_cmps */ { mem, mem, 0, 1, Clb_DI|Clb_SI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
560 /* Op_cmpsd */ { 0, 0, 0, 0, Clb_DI|Clb_SI|Clb_Flags, Next_Form, Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
561 /* Op_cmpsX */ { 0, 0, 0, 0, Clb_DI|Clb_SI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
562 /* Op_cmpxchg8b */ { D|mem/*64*/,0,0, 0, Clb_SizeDXAX/*32*/|Clb_Flags, Out_Mnemonic, Mn_cmpxchg8b }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
563 /* Op_cmpxchg */ { D|mr, reg, 0, 1, Clb_SizeAX|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
564 /* Op_cpuid */ { 0,0,0 }, // Clobbers eax, ebx, ecx, and edx. Handled specially below. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
565 /* Op_enter */ { imm, imm }, // operands *not* reversed for gas, %% inform gcc of EBP clobber?, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
566 /* Op_fdisi */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_fdisi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
567 /* Op_feni */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_feni }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
568 /* Op_fsetpm */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_fsetpm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
569 /* Op_fXstsw */ { D|mr, 0, 0, }, // ax is the only allowed register |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
570 /* Op_imul */ { D|reg, mr, imm, 1, Clb_Flags, Next_Form, Op_imul2 }, // 16/32 only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
571 /* Op_imul2 */ { D|reg, mri, 0, 1, Clb_Flags, Next_Form, Op_imul1 }, // 16/32 only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
572 /* Op_imul1 */ { mr, 0, 0, 1, Clb_Flags|Clb_SizeDXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
573 /* Op_in */ { D|ax,N|port,0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
574 /* Op_ins */ { mem,N|dx, 0, 1, Clb_DI }, // can't override ES segment for this one |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
575 /* Op_insX */ { 0, 0, 0, 0, Clb_DI }, // output segment overrides %% needs work |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
576 /* Op_iret */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_iretw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
577 /* Op_iretd */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_iret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
578 /* Op_lods */ { mem, 0, 0, 1, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
579 /* Op_lodsX */ { 0, 0, 0, 0, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
580 /* Op_movs */ { mem, mem, 0, 1, Clb_DI|Clb_SI }, // only src/DS can be overridden |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
581 /* Op_movsd */ { 0, 0, 0, 0, Clb_DI|Clb_SI, Next_Form, Op_DstSrcSSE }, // %% gas doesn't accept movsd .. has to movsl |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
582 /* Op_movsX */ { 0, 0, 0, 0, Clb_DI|Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
583 /* Op_movsx */ { D|reg, mr, 0, 1 }, // type suffix is special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
584 /* Op_movzx */ { D|reg, mr, 0, 1 }, // type suffix is special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
585 /* Op_mul */ { U|ax, mr, 0, 1, Clb_SizeDXAX|Clb_Flags, Next_Form, Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
586 /* Op_out */ { N|port,ax, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
587 /* Op_outs */ { N|dx, mem, 0, 1, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
588 /* Op_outsX */ { 0, 0, 0, 0, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
589 /* Op_push */ { mri, 0, 0, 0, Clb_SP }, // would be Op_SrcW, but DMD defaults to 32-bit for immediate form |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
590 /* Op_ret */ { imm, 0, 0, 0, 0, Next_Form, Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
591 /* Op_retf */ { 0, 0, 0, 0, 0, Out_Mnemonic, Mn_lret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
592 /* Op_scas */ { mem, 0, 0, 1, Clb_DI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
593 /* Op_scasX */ { 0, 0, 0, 0, Clb_DI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
594 /* Op_stos */ { mem, 0, 0, 1, Clb_DI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
595 /* Op_stosX */ { 0, 0, 0, 0, Clb_DI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
596 /* Op_xlat */ { mem, 0, 0, 0, Clb_SizeAX } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
597 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
598 /// * Op_arpl */ { D|mr, reg }, // 16 only -> DstSrc |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
599 /// * Op_bsX */ { rw, mrw, 0, 1, Clb_Flags },//->srcsrcf |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
600 /// * Op_bt */ { mrw, riw, 0, 1, Clb_Flags },//->srcsrcf |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
601 /// * Op_btX */ { D|mrw, riw, 0, 1, Clb_Flags },//->dstsrcf .. immediate does not contribute to size |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
602 /// * Op_cmovCC */ { D|rw, mrw, 0, 1 } // ->dstsrc |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
603 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
604 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
605 #undef mri |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
606 #undef mr |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
607 #undef mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
608 #undef mfp |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
609 #undef reg |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
610 #undef imm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
611 #undef sse |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
612 #undef ssem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
613 #undef mmx |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
614 #undef mmxm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
615 #undef r32 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
616 #undef rw |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
617 #undef rfp |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
618 #undef port |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
619 #undef ax |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
620 #undef dx |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
621 #undef shft |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
622 #undef D |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
623 #undef U |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
624 #undef N |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
625 //#undef L |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
626 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
627 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
628 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
629 const char * inMnemonic; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
630 AsmOp asmOp; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
631 } AsmOpEnt; |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
632 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
633 /* Some opcodes which have data size restrictions, but we don't check |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
634 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
635 cmov, l<segreg> ?, lea, lsl, shld |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
636 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
637 todo: push <immediate> is always the 32-bit form, even tho push <mem> is 16-bit |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
638 */ |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
639 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
640 static AsmOpEnt opData[] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
641 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
642 { "adc", Op_UpdSrcF }, |
979
523bf4f166bc
Fix some assembler issues:
Frits van Bommel <fvbommel wxs.nl>
parents:
970
diff
changeset
|
643 { "add", Op_UpdSrcF }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
644 { "addpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
645 { "addps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
646 { "addq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
647 { "addsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
648 { "addss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
649 { "addsubpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
650 { "addsubps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
651 { "and", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
652 { "andnpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
653 { "andnps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
654 { "andpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
655 { "andps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
656 { "bsf", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
657 { "bsr", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
658 { "bswap", Op_bswap }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
659 { "bt", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
660 { "btc", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
661 { "btr", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
662 { "bts", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
663 { "call", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
664 { "callf", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
665 { "cbw", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
666 { "cdqe", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
667 { "clc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
668 { "cld", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
669 { "clflush",Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
670 { "cli", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
671 { "clts", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
672 { "cmc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
673 { "cmova", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
674 { "cmovae", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
675 { "cmovb", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
676 { "cmovbe", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
677 { "cmovc", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
678 { "cmove", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
679 { "cmovg", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
680 { "cmovge", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
681 { "cmovl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
682 { "cmovle", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
683 { "cmovna", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
684 { "cmovnae",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
685 { "cmovnb", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
686 { "cmovnbe",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
687 { "cmovnc", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
688 { "cmovne", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
689 { "cmovng", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
690 { "cmovnge",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
691 { "cmovnl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
692 { "cmovnle",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
693 { "cmovno", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
694 { "cmovnp", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
695 { "cmovns", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
696 { "cmovnz", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
697 { "cmovo", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
698 { "cmovp", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
699 { "cmovpe", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
700 { "cmovpo", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
701 { "cmovs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
702 { "cmovz", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
703 { "cmp", Op_SrcSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
704 { "cmppd", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
705 { "cmpps", Op_DstSrcImmS }, |
1016
16e2c750c857
Just forgot an opcode for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
979
diff
changeset
|
706 { "cmpq", Op_DstSrcNT }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
707 { "cmps", Op_cmps }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
708 { "cmpsb", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
709 { "cmpsd", Op_cmpsd }, // string cmp, and SSE cmp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
710 { "cmpss", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
711 { "cmpsw", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
712 { "cmpsq", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
713 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
714 { "cdqe", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
715 { "cmpsq", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
716 { "cmpxch16b", Op_cmpxchg16b }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
717 { "cqo", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
718 { "lodsq", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
719 { "movsq", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
720 { "popfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
721 { "pushfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
722 { "scasq", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
723 { "stosq", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
724 { "iretq", Op_iretd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
725 { "swapgs", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
726 { "extrq", Op_Extrq }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
727 { "movsxq", Op_movsxq }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
728 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
729 { "clgi", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
730 { "invlpga", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
731 { "rdtscp", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
732 { "stgi", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
733 { "sysret", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
734 */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
735 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
736 { "cmpxch16b", Op_cmpxchg8b }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
737 { "cmpxch8b", Op_cmpxchg8b }, // %% DMD opcode typo? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
738 { "cmpxchg", Op_cmpxchg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
739 { "comisd", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
740 { "comiss", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
741 { "cpuid", Op_cpuid }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
742 { "cvtdq2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
743 { "cvtdq2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
744 { "cvtpd2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
745 { "cvtpd2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
746 { "cvtpd2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
747 { "cvtpi2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
748 { "cvtpi2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
749 { "cvtps2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
750 { "cvtps2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
751 { "cvtps2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
752 { "cvtsd2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
753 { "cvtsd2ss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
754 { "cvtsi2sd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
755 { "cvtsi2ss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
756 { "cvtss2sd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
757 { "cvtss2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
758 { "cvttpd2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
759 { "cvttpd2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
760 { "cvttps2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
761 { "cvttps2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
762 { "cvttsd2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
763 { "cvttss2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
764 { "cwd", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
765 { "cwde", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
766 //{ "da", Op_ },// dunno what this is -- takes labels? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
767 { "db", Op_db }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
768 { "dd", Op_dd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
769 { "de", Op_de }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
770 { "dec", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
771 { "df", Op_df }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
772 { "di", Op_di }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
773 { "div", Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
774 { "divpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
775 { "divps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
776 { "divsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
777 { "divss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
778 { "dl", Op_dl }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
779 { "dq", Op_dl }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
780 { "ds", Op_ds }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
781 { "dt", Op_de }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
782 { "dw", Op_ds }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
783 { "emms", Op_0 }, // clobber all mmx/fp? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
784 { "enter", Op_enter }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
785 { "f2xm1", Op_F0_ST }, // %% most of these are update... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
786 { "fabs", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
787 { "fadd", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
788 { "faddp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
789 { "fbld", Op_Fs_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
790 { "fbstp", Op_Fd_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
791 { "fchs", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
792 { "fclex", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
793 { "fcmovb", Op_FdSTiSTi }, // but only ST(0) can be the destination -- should be FdST0STi |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
794 { "fcmovbe", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
795 { "fcmove", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
796 { "fcmovnb", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
797 { "fcmovnbe", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
798 { "fcmovne", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
799 { "fcmovnu", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
800 { "fcmovu", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
801 { "fcom", Op_FCmp }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
802 { "fcomi", Op_FCmpFlg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
803 { "fcomip", Op_FCmpFlgP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
804 { "fcomp", Op_FCmpP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
805 { "fcompp", Op_F0_P }, // pops twice |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
806 { "fcos", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
807 { "fdecstp",Op_F0_P }, // changes stack |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
808 { "fdisi", Op_fdisi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
809 { "fdiv", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
810 { "fdivp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
811 { "fdivr", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
812 { "fdivrp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
813 { "feni", Op_feni }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
814 { "ffree", Op_FdST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
815 { "fiadd", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
816 { "ficom", Op_Fis }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
817 { "ficomp", Op_Fis_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
818 { "fidiv", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
819 { "fidivr", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
820 { "fild", Op_Fis_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
821 { "fimul", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
822 { "fincstp",Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
823 { "finit", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
824 { "fist", Op_Fid }, // only 16,32bit |
1085
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
825 { "fistp", Op_Fid_P }, |
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
826 { "fisttp", Op_Fid_P }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
827 { "fisub", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
828 { "fisubr", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
829 { "fld", Op_fld }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
830 { "fld1", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
831 { "fldcw", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
832 { "fldenv", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
833 { "fldl2e", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
834 { "fldl2t", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
835 { "fldlg2", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
836 { "fldln2", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
837 { "fldpi", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
838 { "fldz", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
839 { "fmul", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
840 { "fmulp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
841 { "fnclex", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
842 { "fndisi", Op_fdisi }, // ?? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
843 { "fneni", Op_feni }, // ?? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
844 { "fninit", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
845 { "fnop", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
846 { "fnsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
847 { "fnstcw", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
848 { "fnstenv",Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
849 { "fnstsw", Op_fXstsw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
850 { "fpatan", Op_F0_P }, // pop and modify new ST |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
851 { "fprem", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
852 { "fprem1", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
853 { "fptan", Op_F0_P }, // modify ST and push 1.0 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
854 { "frndint",Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
855 { "frstor", Op_SrcMemNT }, // but clobbers everything |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
856 { "fsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
857 { "fscale", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
858 { "fsetpm", Op_fsetpm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
859 { "fsin", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
860 { "fsincos",Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
861 { "fsqrt", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
862 { "fst", Op_Ffd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
863 { "fstcw", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
864 { "fstenv", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
865 { "fstp", Op_Ffd_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
866 { "fstsw", Op_fXstsw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
867 { "fsub", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
868 { "fsubp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
869 { "fsubr", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
870 { "fsubrp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
871 { "ftst", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
872 { "fucom", Op_FCmp }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
873 { "fucomi", Op_FCmpFlg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
874 { "fucomip",Op_FCmpFlgP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
875 { "fucomp", Op_FCmpP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
876 { "fucompp",Op_F0_P }, // pops twice |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
877 { "fwait", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
878 { "fxam", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
879 { "fxch", Op_fxch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
880 { "fxrstor",Op_SrcMemNT }, // clobbers FP,MMX,SSE |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
881 { "fxsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
882 { "fxtract",Op_F0_P }, // pushes |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
883 { "fyl2x", Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
884 { "fyl2xp1",Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
885 { "haddpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
886 { "haddps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
887 { "hlt", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
888 { "hsubpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
889 { "hsubps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
890 { "idiv", Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
891 { "imul", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
892 { "in", Op_in }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
893 { "inc", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
894 { "ins", Op_ins }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
895 { "insb", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
896 { "insd", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
897 { "insw", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
898 { "int", Op_SrcImm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
899 { "into", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
900 { "invd", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
901 { "invlpg", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
902 { "iret", Op_iret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
903 { "iretd", Op_iretd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
904 { "iretq", Op_iretd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
905 { "ja", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
906 { "jae", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
907 { "jb", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
908 { "jbe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
909 { "jc", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
910 { "jcxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
911 { "je", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
912 { "jecxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
913 { "jg", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
914 { "jge", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
915 { "jl", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
916 { "jle", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
917 { "jmp", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
918 { "jmpe", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
919 { "jmpf", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
920 { "jna", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
921 { "jnae", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
922 { "jnb", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
923 { "jnbe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
924 { "jnc", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
925 { "jne", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
926 { "jng", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
927 { "jnge", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
928 { "jnl", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
929 { "jnle", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
930 { "jno", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
931 { "jnp", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
932 { "jns", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
933 { "jnz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
934 { "jo", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
935 { "jp", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
936 { "jpe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
937 { "jpo", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
938 { "jrcxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
939 { "js", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
940 { "jz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
941 { "lahf", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
942 { "lar", Op_DstSrcFW }, // reg dest only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
943 { "lddqu", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
944 { "ldmxcsr", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
945 { "lds", Op_DstSrc }, // reg dest only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
946 { "lea", Op_DstSrc }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
947 { "leaq", Op_DstSrcSSE }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
948 { "leave", Op_0 }, // EBP,ESP clobbers |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
949 { "lfence",Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
950 { "lfs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
951 { "lgdt", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
952 { "lgs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
953 { "lidt", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
954 { "lldt", Op_SrcRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
955 { "lmsw", Op_SrcRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
956 { "lock", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
957 { "lods", Op_lods }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
958 { "lodsb", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
959 { "lodsd", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
960 { "lodsw", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
961 { "lodsq", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
962 { "loop", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
963 { "loope", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
964 { "loopne",Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
965 { "loopnz",Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
966 { "loopz", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
967 { "lsl", Op_DstSrcFW }, // reg dest only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
968 { "lss", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
969 { "ltr", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
970 { "maskmovdqu", Op_SrcSrcMMX }, // writes to [edi] |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
971 { "maskmovq", Op_SrcSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
972 { "maxpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
973 { "maxps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
974 { "maxsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
975 { "maxss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
976 { "mfence",Op_0}, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
977 { "minpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
978 { "minps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
979 { "minsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
980 { "minss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
981 { "monitor", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
982 { "mov", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
983 { "movapd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
984 { "movaps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
985 { "movb", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
986 { "movd", Op_DstSrcNT }, // also mmx and sse |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
987 { "movddup", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
988 { "movdq2q", Op_DstSrcNT }, // mmx/sse |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
989 { "movdqa", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
990 { "movdqu", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
991 { "movhlps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
992 { "movhpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
993 { "movhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
994 { "movl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
995 { "movlhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
996 { "movlpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
997 { "movlps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
998 { "movmskpd",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
999 { "movmskps",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1000 { "movntdq", Op_DstSrcNT }, // limited to sse, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1001 { "movnti", Op_DstSrcNT }, // limited to gpr, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1002 { "movntpd", Op_DstSrcNT }, // limited to sse, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1003 { "movntps", Op_DstSrcNT }, // limited to sse, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1004 { "movntq", Op_DstSrcNT }, // limited to mmx, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1005 { "movq", Op_DstSrcNT }, // limited to sse and mmx |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1006 { "movq2dq", Op_DstSrcNT }, // limited to sse <- mmx regs |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1007 { "movs", Op_movs }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1008 { "movsb", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1009 { "movsd", Op_movsd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1010 { "movsq", Op_movsd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1011 { "movshdup", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1012 { "movsldup", Op_DstSrcSSE }, |
970
fb31a4afa2df
Revert wilsonk's "fix" for the callingconv1.d problem.
Frits van Bommel <fvbommel wxs.nl>
parents:
966
diff
changeset
|
1013 { "movss", Op_DstSrcSSE }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1014 { "movsw", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1015 { "movsx", Op_movsx }, // word-only, reg dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1016 { "movsxd", Op_movsx }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1017 { "movupd",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1018 { "movups",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1019 { "movzbl", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1020 { "movzx", Op_movzx }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1021 { "mul", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1022 { "mulpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1023 { "mulps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1024 { "mulsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1025 { "mulss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1026 { "mwait", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1027 { "naked", Op_Naked }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1028 { "neg", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1029 { "nop", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1030 { "not", Op_Upd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1031 { "or", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1032 { "orpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1033 { "orps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1034 { "out", Op_out }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1035 { "outs", Op_outs }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1036 { "outsb", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1037 { "outsd", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1038 { "outsw", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1039 { "pabsb", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1040 { "pabsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1041 { "pabsq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1042 { "packssdw", Op_DstSrcMMX }, // %% also SSE |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1043 { "packsswb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1044 { "packuswb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1045 { "paddb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1046 { "paddd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1047 { "paddq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1048 { "paddsb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1049 { "paddsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1050 { "paddusb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1051 { "paddusw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1052 { "paddw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1053 { "palignr", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1054 { "pand", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1055 { "pandn", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1056 { "pause", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1057 { "pavgb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1058 { "pavgw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1059 { "pcmpeqb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1060 { "pcmpeqd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1061 { "pcmpeqw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1062 { "pcmpgtb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1063 { "pcmpgtd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1064 { "pcmpgtw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1065 { "pextrw", Op_DstSrcImmM }, // gpr32 dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1066 { "phaddd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1067 { "phaddsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1068 { "phaddw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1069 { "phsubd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1070 { "phsubsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1071 { "phsubw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1072 { "pinsrw", Op_DstSrcImmM }, // gpr32(16), mem16 src, sse too |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1073 { "pmaddubsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1074 { "pmaddwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1075 { "pmaxsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1076 { "pmaxub", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1077 { "pminsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1078 { "pminub", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1079 { "pmovmskb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1080 { "pmulhrsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1081 { "pmulhuw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1082 { "pmulhw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1083 { "pmullw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1084 { "pmuludq", Op_DstSrcMMX }, // also sse |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1085 { "popf", Op_SizedStack }, // rewrite the insn with a special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1086 { "popfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1087 { "popq", Op_push }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1088 { "por", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1089 { "prefetchnta", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1090 { "prefetcht0", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1091 { "prefetcht1", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1092 { "prefetcht2", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1093 { "psadbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1094 { "pshufb", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1095 { "pshufd", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1096 { "pshufhw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1097 { "pshuflw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1098 { "pshufw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1099 { "psignb", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1100 { "psignd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1101 { "psignw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1102 { "pslld", Op_DstSrcMMX }, // immediate operands... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1103 { "pslldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1104 { "psllq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1105 { "psllw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1106 { "psrad", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1107 { "psraw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1108 { "psrld", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1109 { "psrldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1110 { "psrlq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1111 { "psrlw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1112 { "psubb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1113 { "psubd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1114 { "psubq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1115 { "psubsb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1116 { "psubsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1117 { "psubusb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1118 { "psubusw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1119 { "psubw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1120 { "punpckhbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1121 { "punpckhdq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1122 { "punpckhqdq",Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1123 { "punpckhwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1124 { "punpcklbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1125 { "punpckldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1126 { "punpcklqdq",Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1127 { "punpcklwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1128 { "pushf", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1129 { "pushfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1130 { "pushq", Op_push }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1131 { "pxor", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1132 { "rcl", Op_Shift }, // limited src operands -- change to shift |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1133 { "rcpps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1134 { "rcpss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1135 { "rcr", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1136 { "rdmsr", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1137 { "rdpmc", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1138 { "rdtsc", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1139 { "rep", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1140 { "repe", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1141 { "repne", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1142 { "repnz", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1143 { "repz", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1144 { "ret", Op_ret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1145 { "retf", Op_retf }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1146 { "retn", Op_retf }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1147 { "rol", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1148 { "ror", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1149 { "rsm", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1150 { "rsqrtps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1151 { "rsqrtss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1152 { "sahf", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1153 { "sal", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1154 { "salq", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1155 { "sar", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1156 { "sbb", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1157 { "scas", Op_scas }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1158 { "scasb", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1159 { "scasd", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1160 { "scasw", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1161 { "scasq", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1162 { "seta", Op_DstRMBNT }, // also gpr8 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1163 { "setae", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1164 { "setb", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1165 { "setbe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1166 { "setc", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1167 { "sete", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1168 { "setg", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1169 { "setge", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1170 { "setl", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1171 { "setle", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1172 { "setna", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1173 { "setnae", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1174 { "setnb", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1175 { "setnbe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1176 { "setnc", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1177 { "setne", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1178 { "setng", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1179 { "setnge", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1180 { "setnl", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1181 { "setnle", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1182 { "setno", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1183 { "setnp", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1184 { "setns", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1185 { "setnz", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1186 { "seto", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1187 { "setp", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1188 { "setpe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1189 { "setpo", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1190 { "sets", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1191 { "setz", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1192 { "sfence", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1193 { "sgdt", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1194 { "shl", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1195 { "shld", Op_UpdSrcShft }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1196 { "shr", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1197 { "shrd", Op_UpdSrcShft }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1198 { "shufpd", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1199 { "shufps", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1200 { "sidt", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1201 { "sldt", Op_DstRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1202 { "smsw", Op_DstRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1203 { "sqrtpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1204 { "sqrtps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1205 { "sqrtsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1206 { "sqrtss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1207 { "stc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1208 { "std", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1209 { "sti", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1210 { "stmxcsr",Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1211 { "stos", Op_stos }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1212 { "stosb", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1213 { "stosd", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1214 { "stosw", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1215 { "stosq", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1216 { "str", Op_DstMemNT }, // also r16 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1217 { "sub", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1218 { "subpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1219 { "subps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1220 { "subq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1221 { "subsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1222 { "subss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1223 { "swapgs", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1224 { "sysenter",Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1225 { "sysexit", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1226 { "sysret", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1227 { "testl", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1228 { "ucomisd", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1229 { "ucomiss", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1230 { "ud2", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1231 { "unpckhpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1232 { "unpckhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1233 { "unpcklpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1234 { "unpcklps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1235 { "verr", Op_SrcMemNTF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1236 { "verw", Op_SrcMemNTF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1237 { "wbinvd", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1238 { "wrmsr", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1239 { "xadd", Op_UpdUpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1240 { "xchg", Op_UpdUpd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1241 { "xlat", Op_xlat }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1242 { "xlatb", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1243 { "xor", Op_DstSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1244 { "xorpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1245 { "xorps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1246 { "xorq", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1247 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1248 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1249 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1250 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1251 Default_Ptr = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1252 Byte_Ptr = 1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1253 Short_Ptr = 2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1254 Int_Ptr = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1255 QWord_Ptr = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1256 Float_Ptr = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1257 Double_Ptr = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1258 Extended_Ptr = 10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1259 Near_Ptr = 98, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1260 Far_Ptr = 99, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1261 N_PtrTypes |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1262 } PtrType; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1263 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1264 static const int N_PtrNames = 8; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1265 static const char * ptrTypeNameTable[N_PtrNames] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1266 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1267 "word", "dword", "qword", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1268 "float", "double", "extended", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1269 "near", "far" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1270 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1271 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1272 static Identifier * ptrTypeIdentTable[N_PtrNames]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1273 static PtrType ptrTypeValueTable[N_PtrNames] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1274 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1275 Short_Ptr, Int_Ptr, QWord_Ptr, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1276 Float_Ptr, Double_Ptr, Extended_Ptr, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1277 Near_Ptr, Far_Ptr |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1278 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1279 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1280 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1281 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1282 Opr_Invalid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1283 Opr_Immediate, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1284 Opr_Reg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1285 Opr_Mem |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1286 } OperandClass; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1287 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1288 /* kill inlining if we reference a local? */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1289 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1290 /* DMD seems to allow only one 'symbol' per operand .. include __LOCAL_SIZE */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1291 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1292 /* DMD offset usage: <parm>[<reg>] seems to always be relative to EBP+8 .. even |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1293 if naked.. */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1294 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1295 // mov eax, 4 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1296 // mov eax, fs:4 |
871
e70a0e7e2260
Apply duane's patch for align power-of-two checking in inline asm. Fixes #159
Christian Kamm <kamm incasoftware de>
parents:
793
diff
changeset
|
1297 // -- have to assume we know whether or not to use '$' |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1298 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1299 static Token eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1300 static Expression * Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1301 static Identifier * ident_seg; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1302 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1303 struct AsmProcessor |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1304 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1305 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1306 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1307 int inBracket; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1308 int hasBracket; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1309 int hasNumber; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1310 int isOffset; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1311 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1312 Reg segmentPrefix; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1313 Reg reg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1314 sinteger_t constDisplacement; // use to build up.. should be int constant in the end.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1315 Array symbolDisplacement; // array of expressions or.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1316 Reg baseReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1317 Reg indexReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1318 int scale; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1319 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1320 OperandClass cls; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1321 PtrType dataSize; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1322 PtrType dataSizeHint; // DMD can use the type of a referenced variable |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1323 } Operand; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1324 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1325 static const unsigned Max_Operands = 3; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1326 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1327 AsmStatement * stmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1328 Scope * sc; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1329 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1330 Token * token; |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1331 std::ostringstream insnTemplate; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1332 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1333 AsmOp op; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1334 AsmOpInfo * opInfo; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1335 Operand operands[Max_Operands]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1336 Identifier * opIdent; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1337 Operand * operand; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1338 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1339 AsmProcessor ( Scope * sc, AsmStatement * stmt ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1340 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1341 this->sc = sc; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1342 this->stmt = stmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1343 token = stmt->tokens; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1344 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1345 opInfo = NULL; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1346 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1347 if ( ! regInfo[0].ident ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1348 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1349 char buf[8], *p; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1350 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1351 for ( int i = 0; i < N_Regs; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1352 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1353 strncpy ( buf, regInfo[i].name, sizeof ( buf ) - 1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1354 for ( p = buf; *p; p++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1355 *p = std::tolower ( *p ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1356 regInfo[i].gccName = std::string ( buf, p - buf ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1357 if ( ( i <= Reg_ST || i > Reg_ST7 ) && i != Reg_EFLAGS ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1358 regInfo[i].ident = Lexer::idPool ( regInfo[i].name ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1359 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1360 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1361 for ( int i = 0; i < N_PtrNames; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1362 ptrTypeIdentTable[i] = Lexer::idPool ( ptrTypeNameTable[i] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1363 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1364 Handled = new Expression ( 0, TOKvoid, sizeof ( Expression ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1365 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1366 ident_seg = Lexer::idPool ( "seg" ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1367 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1368 eof_tok.value = TOKeof; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1369 eof_tok.next = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1370 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1371 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1372 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1373 void run() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1374 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1375 parse(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1376 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1377 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1378 void nextToken() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1379 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1380 if ( token->next ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1381 token = token->next; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1382 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1383 token = & eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1384 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1385 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1386 Token * peekToken() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1387 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1388 if ( token->next ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1389 return token->next; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1390 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1391 return & eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1392 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1393 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1394 void expectEnd() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1395 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1396 if ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1397 stmt->error ( "expected end of statement" ); // %% extra at end... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1398 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1399 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1400 void parse() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1401 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1402 op = parseOpcode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1403 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1404 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1405 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1406 case Op_Align: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1407 doAlign(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1408 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1409 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1410 case Op_Even: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1411 doEven(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1412 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1413 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1414 case Op_Naked: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1415 doNaked(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1416 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1417 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1418 case Op_Invalid: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1419 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1420 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1421 if ( op >= Op_db && op <= Op_de ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1422 doData(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1423 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1424 doInstruction(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1425 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1426 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1427 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1428 AsmOp parseOpcode() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1429 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1430 static const int N_ents = sizeof ( opData ) /sizeof ( AsmOpEnt ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1431 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1432 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1433 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1434 case TOKalign: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1435 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1436 return Op_Align; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1437 case TOKin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1438 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1439 opIdent = Id::___in; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1440 return Op_in; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1441 case TOKint32: // "int" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1442 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1443 opIdent = Id::__int; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1444 return Op_SrcImm; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1445 case TOKout: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1446 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1447 opIdent = Id::___out; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1448 return Op_out; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1449 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1450 // search for mnemonic below |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1451 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1452 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1453 stmt->error ( "expected opcode" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1454 return Op_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1455 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1456 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1457 opIdent = token->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1458 const char * opcode = token->ident->string; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1459 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1460 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1461 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1462 // %% okay to use bsearch? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1463 int i = 0, j = N_ents, k, l; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1464 do |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1465 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1466 k = ( i + j ) / 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1467 l = strcmp ( opcode, opData[k].inMnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1468 if ( ! l ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1469 return opData[k].asmOp; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1470 else if ( l < 0 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1471 j = k; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1472 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1473 i = k + 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1474 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1475 while ( i != j ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1476 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1477 stmt->error ( "unknown opcode '%s'", opcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1478 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1479 return Op_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1480 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1481 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1482 // need clobber information.. use information is good too... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1483 void doInstruction() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1484 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1485 bool ok = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1486 unsigned operand_i = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1487 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1488 opInfo = & asmOpInfo[op]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1489 memset ( operands, 0, sizeof ( operands ) ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1490 |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1491 if ( token->value == TOKeof && ( op == Op_FMath0) ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1492 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1493 for ( operand_i = 0; operand_i < 1; operand_i++) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1494 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1495 operand = & operands[operand_i]; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1496 operand->reg = operand->baseReg = operand->indexReg = |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1497 operand->segmentPrefix = Reg_Invalid; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1498 |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1499 operand->cls = Opr_Reg; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1500 if ( operand_i == 0) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1501 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1502 operand->reg = Reg_ST; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1503 } |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1504 else |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1505 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1506 operand->reg = Reg_ST1; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1507 } |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1508 operand->hasNumber = 0; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1509 operand->constDisplacement = 0; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1510 parseOperand(); |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1511 |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1512 if ( matchOperands ( operand_i ) ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1513 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1514 AsmCode * asmcode = new AsmCode ( N_Regs ); |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1515 |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1516 if ( formatInstruction ( operand_i, asmcode ) ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1517 stmt->asmcode = ( code * ) asmcode; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1518 } |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1519 } |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1520 return; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1521 } |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1522 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1523 while ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1524 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1525 if ( operand_i < Max_Operands ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1526 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1527 operand = & operands[operand_i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1528 operand->reg = operand->baseReg = operand->indexReg = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1529 operand->segmentPrefix = Reg_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1530 parseOperand(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1531 operand_i++; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1532 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1533 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1534 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1535 ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1536 stmt->error ( "too many operands for instruction" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1537 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1538 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1539 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1540 if ( token->value == TOKcomma ) |
1078
9c63438c3207
Fix for asm { jle short Lret; }, used by Tango since dmd accepts the 'short'. We just
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1059
diff
changeset
|
1541 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1542 nextToken(); |
1078
9c63438c3207
Fix for asm { jle short Lret; }, used by Tango since dmd accepts the 'short'. We just
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1059
diff
changeset
|
1543 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1544 else if ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1545 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1546 ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1547 stmt->error ( "expected comma after operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1548 return; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1549 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1550 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1551 // if (operand_i < opInfo->minOperands) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1552 // ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1553 // stmt->error("too few operands for instruction"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1554 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1555 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1556 if ( matchOperands ( operand_i ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1557 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1558 AsmCode * asmcode = new AsmCode ( N_Regs ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1559 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1560 if ( formatInstruction ( operand_i, asmcode ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1561 stmt->asmcode = ( code * ) asmcode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1562 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1563 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1564 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1565 void setAsmCode() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1566 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1567 AsmCode * asmcode = new AsmCode ( N_Regs ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1568 asmcode->insnTemplate = insnTemplate.str(); |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
1569 Logger::cout() << "insnTemplate = " << asmcode->insnTemplate << '\n'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1570 stmt->asmcode = ( code* ) asmcode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1571 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1572 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1573 // note: doesn't update AsmOp op |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1574 bool matchOperands ( unsigned nOperands ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1575 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1576 bool wrong_number = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1577 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1578 for ( unsigned i = 0; i < nOperands; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1579 classifyOperand ( & operands[i] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1580 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1581 while ( 1 ) |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1582 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1583 if ( nOperands == opInfo->nOperands() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1584 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1585 wrong_number = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1586 /* Cases in which number of operands is not |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1587 enough for a match: Op_FCmp/Op_FCmp1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1588 Op_FCmpP/Op_FCmpP1 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1589 for ( unsigned i = 0; i < nOperands; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1590 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1591 Operand * operand = & operands[i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1592 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1593 switch ( opInfo->operands[i] & Opr_ClassMask ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1594 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1595 case OprC_Mem: // no FPMem currently |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1596 if ( operand->cls != Opr_Mem ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1597 goto no_match; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1598 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1599 case OprC_RFP: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1600 if ( ! ( operand->reg >= Reg_ST && operand->reg <= Reg_ST7 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1601 goto no_match; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1602 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1603 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1604 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1605 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1606 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1607 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1608 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1609 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1610 no_match: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1611 if ( opInfo->linkType == Next_Form ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1612 opInfo = & asmOpInfo[ op = ( AsmOp ) opInfo->link ]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1613 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1614 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1615 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1616 if ( wrong_number ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1617 stmt->error ( "wrong number of operands" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1618 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1619 stmt->error ( "wrong operand types" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1620 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1621 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1622 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1623 void addOperand ( const char * fmt, AsmArgType type, Expression * e, AsmCode * asmcode, AsmArgMode mode = Mode_Input ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1624 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1625 if ( sc->func->naked ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1626 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1627 switch ( type ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1628 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1629 case Arg_Integer: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1630 if ( e->type->isunsigned() ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1631 insnTemplate << "$" << e->toUInteger(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1632 else |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1633 insnTemplate << "$" << e->toInteger(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1634 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1635 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1636 case Arg_Pointer: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1637 stmt->error ( "unsupported pointer reference to '%s' in naked asm", e->toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1638 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1639 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1640 case Arg_Memory: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1641 if ( e->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1642 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1643 VarExp* v = ( VarExp* ) e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1644 if ( VarDeclaration* vd = v->var->isVarDeclaration() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1645 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1646 if ( !vd->isDataseg() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1647 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1648 stmt->error ( "only global variables can be referenced by identifier in naked asm" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1649 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1650 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1651 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1652 // osx needs an extra underscore |
1190
ea7b8b6c96c0
Some more fixups for mingw -- missing underscores
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1109
diff
changeset
|
1653 if ( global.params.os == OSMacOSX || global.params.os == OSWindows ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1654 insnTemplate << "_"; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1655 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1656 // print out the mangle |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1657 insnTemplate << vd->mangle(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1658 vd->nakedUse = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1659 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1660 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1661 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1662 stmt->error ( "unsupported memory reference to '%s' in naked asm", e->toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1663 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1664 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1665 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1666 assert ( 0 && "asm unsupported arg" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1667 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1668 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1669 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1670 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1671 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1672 insnTemplate << fmt |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1673 << "<<" << (mode==Mode_Input ? "in" : "out") << asmcode->args.size() << ">>"; |
1101
8bf8b058944a
Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents:
1100
diff
changeset
|
1674 asmcode->args.push_back ( AsmArg ( type, e, mode ) ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1675 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1676 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1677 void addOperand2 ( const char * fmtpre, const char * fmtpost, AsmArgType type, Expression * e, AsmCode * asmcode, AsmArgMode mode = Mode_Input ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1678 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1679 assert ( !sc->func->naked ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1680 insnTemplate << fmtpre |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1681 << "<<" << (mode==Mode_Input ? "in" : "out") << ">>" |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1682 << fmtpost; |
1101
8bf8b058944a
Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents:
1100
diff
changeset
|
1683 asmcode->args.push_back ( AsmArg ( type, e, mode ) ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1684 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1685 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1686 void addLabel ( char* id ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1687 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1688 insnTemplate << sc->func->mangle() << "_" << id; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1689 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1690 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1691 /* Determines whether the operand is a register, memory reference |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1692 or immediate. Immediate addresses are currently classified as |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1693 memory. This function is called before the exact instructions |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1694 is known and thus, should not use opInfo. */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1695 void classifyOperand ( Operand * operand ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1696 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1697 operand->cls = classifyOperand1 ( operand ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1698 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1699 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1700 OperandClass classifyOperand1 ( Operand * operand ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1701 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1702 bool is_localsize = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1703 bool really_have_symbol = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1704 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1705 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1706 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1707 is_localsize = isLocalSize ( ( Expression * ) operand->symbolDisplacement.data[0] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1708 really_have_symbol = ! is_localsize; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1709 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1710 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1711 if ( operand->isOffset && ! operand->hasBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1712 return Opr_Immediate; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1713 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1714 if ( operand->hasBracket || really_have_symbol ) // %% redo for 'offset' function |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1715 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1716 if ( operand->reg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1717 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1718 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1719 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1720 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1721 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1722 return Opr_Mem; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1723 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1724 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1725 if ( operand->reg != Reg_Invalid && operand->constDisplacement != 0 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1726 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1727 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1728 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1729 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1730 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1731 if ( operand->segmentPrefix != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1732 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1733 if ( operand->reg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1734 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1735 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1736 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1737 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1738 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1739 return Opr_Mem; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1740 } |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1741 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1742 if ( operand->reg != Reg_Invalid && ! operand->hasNumber ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1743 return Opr_Reg; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1744 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1745 // should check immediate given (operand->hasNumber); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1746 // |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1747 if ( operand->hasNumber || is_localsize ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1748 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1749 // size determination not correct if there are symbols Opr_Immediate |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1750 if ( operand->dataSize == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1751 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1752 if ( operand->constDisplacement < 0x100 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1753 operand->dataSize = Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1754 else if ( operand->constDisplacement < 0x10000 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1755 operand->dataSize = Short_Ptr; |
966
e7dd879caae5
Reduce size of integer constant make x86-64 asm parsing code compile on x86-32.
Christian Kamm <kamm incasoftware de>
parents:
963
diff
changeset
|
1756 else if ( operand->constDisplacement <= 0xFFFFFFFF ) |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
1757 operand->dataSize = Int_Ptr; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1758 else |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
1759 //This could be possible since we are using 48 bits |
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
1760 operand->dataSize = QWord_Ptr; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1761 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1762 return Opr_Immediate; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1763 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1764 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1765 // probably a bug,? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1766 stmt->error ( "invalid operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1767 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1768 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1769 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1770 void writeReg ( Reg reg ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1771 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1772 insnTemplate << "%" << regInfo[reg].gccName; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1773 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1774 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1775 bool opTakesLabel() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1776 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1777 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1778 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1779 case Op_Branch: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1780 case Op_CBranch: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1781 case Op_Loop: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1782 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1783 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1784 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1785 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1786 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1787 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1788 bool getTypeChar ( TypeNeeded needed, PtrType ptrtype, char & type_char ) |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1789 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1790 switch ( needed ) |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1791 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1792 case Byte_NoType: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1793 return ptrtype == Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1794 case Word_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1795 if ( ptrtype == Byte_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1796 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1797 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1798 case Int_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1799 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1800 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1801 case Byte_Ptr: type_char = 'b'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1802 case Short_Ptr: type_char = 'w'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1803 case Int_Ptr: type_char = 'l'; break; |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
1804 case QWord_Ptr: type_char = 'q'; break; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1805 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1806 // %% these may be too strict |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1807 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1808 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1809 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1810 case FPInt_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1811 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1812 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1813 case Short_Ptr: type_char = 0; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1814 case Int_Ptr: type_char = 'l'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1815 case QWord_Ptr: type_char = 'q'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1816 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1817 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1818 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1819 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1820 case FP_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1821 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1822 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1823 case Float_Ptr: type_char = 's'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1824 case Double_Ptr: type_char = 'l'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1825 case Extended_Ptr: type_char = 't'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1826 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1827 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1828 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1829 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1830 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1831 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1832 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1833 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1834 } |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1835 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1836 // also set impl clobbers |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1837 bool formatInstruction ( int nOperands, AsmCode * asmcode ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1838 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1839 const char *fmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1840 const char *mnemonic; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1841 char type_char = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1842 bool use_star; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1843 AsmArgMode mode; |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1844 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1845 insnTemplate.str(""); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1846 // %% todo: special case for something.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1847 if ( opInfo->linkType == Out_Mnemonic ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1848 mnemonic = alternateMnemonics[opInfo->link]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1849 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1850 mnemonic = opIdent->string; |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1851 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1852 if ( opInfo->needsType ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1853 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1854 PtrType exact_type = Default_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1855 PtrType min_type = Default_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1856 PtrType hint_type = Default_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1857 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1858 /* Default types: This attempts to match the observed behavior of DMD */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1859 switch ( opInfo->needsType ) |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1860 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1861 case Int_Types: min_type = Byte_Ptr; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1862 case Word_Types: min_type = Short_Ptr; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1863 case FPInt_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1864 if ( op == Op_Fis_ST ) // integer math instructions |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1865 min_type = Int_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1866 else // compare, load, store |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1867 min_type = Short_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1868 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1869 case FP_Types: min_type = Float_Ptr; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1870 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1871 if ( op == Op_push && operands[0].cls == Opr_Immediate ) |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
1872 min_type = QWord_Ptr; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1873 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1874 for ( int i = 0; i < nOperands; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1875 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1876 if ( hint_type == Default_Ptr && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1877 ! ( opInfo->operands[i] & Opr_NoType ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1878 hint_type = operands[i].dataSizeHint; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1879 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1880 if ( ( opInfo->operands[i] & Opr_NoType ) || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1881 operands[i].dataSize == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1882 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1883 if ( operands[i].cls == Opr_Immediate ) |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1884 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1885 min_type = operands[i].dataSize > min_type ? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1886 operands[i].dataSize : min_type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1887 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1888 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1889 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1890 exact_type = operands[i].dataSize; // could check for conflicting types |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1891 break; |
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1892 } |
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1893 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1894 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1895 bool type_ok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1896 if ( exact_type == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1897 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1898 type_ok = getTypeChar ( ( TypeNeeded ) opInfo->needsType, hint_type, type_char ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1899 if ( ! type_ok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1900 type_ok = getTypeChar ( ( TypeNeeded ) opInfo->needsType, min_type, type_char ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1901 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1902 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1903 type_ok = getTypeChar ( ( TypeNeeded ) opInfo->needsType, exact_type, type_char ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1904 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1905 if ( ! type_ok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1906 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1907 stmt->error ( "invalid operand size" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1908 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1909 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1910 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1911 else if ( op == Op_Branch ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1912 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1913 if ( operands[0].dataSize == Far_Ptr ) // %% type=Far_Ptr not set by Seg:Ofss OTOH, we don't support that.. |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1914 insnTemplate << 'l'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1915 } |
1085
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
1916 else if ( op == Op_fxch || op == Op_FfdRR_P || op == Op_FidR_P ) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1917 { |
1085
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
1918 if ( operands[0].cls == Opr_Mem && op == Op_FidR_P ) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1919 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1920 nOperands = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1921 } |
1085
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
1922 // gas won't accept the two-operand form |
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
1923 else if ( operands[1].cls == Opr_Reg && operands[1].reg == Reg_ST ) |
1083
c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1078
diff
changeset
|
1924 { |
c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1078
diff
changeset
|
1925 nOperands = 1; |
c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1078
diff
changeset
|
1926 } |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1927 else if ( operands[0].cls == Opr_Reg && (operands[0].reg == Reg_ST1 || operands[0].reg == Reg_ST )) |
1083
c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1078
diff
changeset
|
1928 { |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1929 //fix previous update to allow single operand form of fstp |
1083
c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1078
diff
changeset
|
1930 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1931 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1932 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1933 stmt->error ( "invalid operands" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1934 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1935 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1936 } |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1937 else if ( op == Op_FMath0 || op == Op_FdST0ST1 ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1938 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1939 operands[0].cls = Opr_Reg; |
1301
1e30cc395d2e
fix wrong arg order for fmul/fadd
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1190
diff
changeset
|
1940 operands[0].reg = Reg_ST1; |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1941 operands[1].cls = Opr_Reg; |
1301
1e30cc395d2e
fix wrong arg order for fmul/fadd
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1190
diff
changeset
|
1942 operands[1].reg = Reg_ST; |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1943 nOperands = 2; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1944 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1945 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1946 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1947 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1948 case Op_SizedStack: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1949 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1950 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1951 if ( mnemonic[mlen-1] == 'd' ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1952 insnTemplate.write(mnemonic, mlen-1); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1953 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1954 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1955 insnTemplate << mnemonic << 'w'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1956 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1957 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1958 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1959 case Op_cmpsd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1960 case Op_insX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1961 case Op_lodsX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1962 case Op_movsd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1963 case Op_outsX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1964 case Op_scasX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1965 case Op_stosX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1966 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1967 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1968 if ( mnemonic[mlen-1] == 'd' ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1969 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1970 insnTemplate.write(mnemonic, mlen-1) << 'l'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1971 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1972 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1973 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1974 insnTemplate << mnemonic; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1975 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1976 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1977 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1978 case Op_movsx: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1979 case Op_movzx: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1980 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1981 char tc_1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1982 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1983 PtrType op1_size = operands[1].dataSize; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1984 if ( op1_size == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1985 op1_size = operands[1].dataSizeHint; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1986 // Need type char for source arg |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1987 switch ( op1_size ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1988 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1989 case Byte_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1990 case Default_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1991 tc_1 = 'b'; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1992 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1993 case Short_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1994 tc_1 = 'w'; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1995 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1996 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1997 stmt->error ( "invalid operand size/type" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1998 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1999 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2000 assert ( type_char != 0 ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2001 insnTemplate.write(mnemonic, mlen-1) << tc_1 << type_char; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2002 } |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2003 break; |
1303
c250e03d8a5b
Make the no-operand versions of floating point inline asm instructions always
Christian Kamm <kamm incasoftware de>
parents:
1302
diff
changeset
|
2004 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2005 default: |
1302
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2006 // special case fdiv, fsub: see dmd 840, ldc 256 |
1310
85b80c4fe48a
Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents:
1304
diff
changeset
|
2007 if ((strncmp(mnemonic, "fsub", 4) == 0 || |
85b80c4fe48a
Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents:
1304
diff
changeset
|
2008 strncmp(mnemonic, "fdiv", 4) == 0) && |
85b80c4fe48a
Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents:
1304
diff
changeset
|
2009 operands[0].reg != Reg_ST) |
1302
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2010 { |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2011 // replace: |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2012 // f{sub,div}r{p,} <-> f{sub,div}{p,} |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2013 if (mnemonic[4] == 'r') |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2014 { |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2015 insnTemplate.write(mnemonic, 4); |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2016 insnTemplate.write(mnemonic+5, strlen(mnemonic)-5); |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2017 } |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2018 else |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2019 { |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2020 insnTemplate.write(mnemonic, 4) << "r"; |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2021 insnTemplate.write(mnemonic+4, strlen(mnemonic)-4); |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2022 } |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2023 } |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2024 else |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2025 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2026 insnTemplate << mnemonic; |
1302
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2027 } |
1310
85b80c4fe48a
Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents:
1304
diff
changeset
|
2028 // the no-operand versions of floating point ops always pop |
85b80c4fe48a
Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents:
1304
diff
changeset
|
2029 if (op == Op_FMath0) |
85b80c4fe48a
Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents:
1304
diff
changeset
|
2030 insnTemplate << "p"; |
1302
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2031 if ( type_char ) |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2032 insnTemplate << type_char; |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2033 break; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2034 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2035 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2036 switch ( opInfo->implicitClobbers & Clb_DXAX_Mask ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2037 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2038 case Clb_SizeAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2039 case Clb_EAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2040 asmcode->regs[Reg_EAX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2041 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2042 case Clb_SizeDXAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2043 asmcode->regs[Reg_EAX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2044 if ( type_char != 'b' ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2045 asmcode->regs[Reg_EDX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2046 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2047 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2048 // nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2049 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2050 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2051 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2052 if ( opInfo->implicitClobbers & Clb_DI ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2053 asmcode->regs[Reg_EDI] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2054 if ( opInfo->implicitClobbers & Clb_SI ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2055 asmcode->regs[Reg_ESI] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2056 if ( opInfo->implicitClobbers & Clb_CX ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2057 asmcode->regs[Reg_ECX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2058 if ( opInfo->implicitClobbers & Clb_SP ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2059 asmcode->regs[Reg_ESP] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2060 if ( opInfo->implicitClobbers & Clb_ST ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2061 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2062 /* Can't figure out how to tell GCC that an |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2063 asm statement leaves an arg pushed on the stack. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2064 Maybe if the statment had and input or output |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2065 operand it would work... In any case, clobbering |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2066 all FP prevents incorrect code generation. */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2067 asmcode->regs[Reg_ST] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2068 asmcode->regs[Reg_ST1] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2069 asmcode->regs[Reg_ST2] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2070 asmcode->regs[Reg_ST3] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2071 asmcode->regs[Reg_ST4] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2072 asmcode->regs[Reg_ST5] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2073 asmcode->regs[Reg_ST6] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2074 asmcode->regs[Reg_ST7] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2075 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2076 if ( opInfo->implicitClobbers & Clb_Flags ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2077 asmcode->regs[Reg_EFLAGS] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2078 if ( op == Op_cpuid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2079 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2080 asmcode->regs[Reg_EAX] = true; |
1095
d6bd818212de
Add missing EBX clobber to CPUID asm instruction.
Frits van Bommel <fvbommel wxs.nl>
parents:
1093
diff
changeset
|
2081 asmcode->regs[Reg_EBX] = true; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2082 asmcode->regs[Reg_ECX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2083 asmcode->regs[Reg_EDX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2084 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2085 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2086 insnTemplate << ' '; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2087 for ( int i__ = 0; i__ < nOperands; i__++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2088 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2089 int i; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2090 if ( i__ != 0 ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2091 insnTemplate << ", "; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2092 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2093 fmt = "$"; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2094 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2095 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2096 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2097 case Op_mul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2098 // gas won't accept the two-operand form; skip to the source operand |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2099 i__ = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2100 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2101 case Op_bound: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2102 case Op_enter: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2103 i = i__; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2104 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2105 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2106 i = nOperands - 1 - i__; // operand = & operands[ nOperands - 1 - i ]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2107 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2108 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2109 operand = & operands[ i ]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2110 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2111 switch ( operand->cls ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2112 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2113 case Opr_Immediate: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2114 // for implementing offset: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2115 // $var + $7 // fails |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2116 // $var + 7 // ok |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2117 // $7 + $var // ok |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2118 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2119 // DMD doesn't seem to allow this |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2120 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2121 if (opInfo->takesLabel()) tho... (near ptr <Number> would be abs?) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2122 fmt = "$a"; // GAS won't accept "jmp $42"; must be "jmp 42" (rel) or "jmp *42" (abs) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2123 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2124 if ( opTakesLabel() /*opInfo->takesLabel()*/ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2125 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2126 // "relative addressing not allowed in branch instructions" .. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2127 stmt->error ( "integer constant not allowed in branch instructions" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2128 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2129 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2130 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2131 if ( operand->symbolDisplacement.dim && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2132 isLocalSize ( ( Expression * ) operand->symbolDisplacement.data[0] ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2133 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2134 // handle __LOCAL_SIZE, which in this constant, is an immediate |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2135 // should do this in slotexp.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2136 addOperand ( "$", Arg_LocalSize, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2137 ( Expression * ) operand->symbolDisplacement.data[0], asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2138 if ( operand->constDisplacement ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2139 insnTemplate << '+'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2140 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2141 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2142 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2143 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2144 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2145 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2146 fmt = "$a"; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2147 addOperand ( "$", Arg_Pointer, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2148 ( Expression * ) operand->symbolDisplacement.data[0], |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2149 asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2150 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2151 if ( operand->constDisplacement ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2152 insnTemplate << '+'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2153 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2154 // skip the addOperand(fmt, Arg_Integer...) below |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2155 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2156 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2157 addOperand ( fmt, Arg_Integer, newIntExp ( operand->constDisplacement ), asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2158 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2159 case Opr_Reg: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2160 if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2161 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2162 Reg clbr_reg = ( Reg ) regInfo[operand->reg].baseReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2163 if ( clbr_reg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2164 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2165 asmcode->regs[clbr_reg] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2166 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2167 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2168 if ( opTakesLabel() /*opInfo->takesLabel()*/ ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2169 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2170 writeReg ( operand->reg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2171 /* |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2172 insnTemplate << "%"; |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2173 insnTemplate << regInfo[operand->reg].name; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2174 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2175 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2176 case Opr_Mem: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2177 // better: use output operands for simple variable references |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2178 if ( ( opInfo->operands[i] & Opr_Update ) == Opr_Update ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2179 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2180 mode = Mode_Update; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2181 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2182 else if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2183 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2184 mode = Mode_Output; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2185 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2186 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2187 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2188 mode = Mode_Input; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2189 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2190 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2191 use_star = opTakesLabel();//opInfo->takesLabel(); |
1093
cb868105a6b5
Change x64 asm in Cache.d from a positive offset from after rbp "-20(%rbp)+4" to before
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1091
diff
changeset
|
2192 |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2193 if (Logger::enabled()) { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2194 Logger::cout() << "Opr_Mem\n"; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2195 LOG_SCOPE |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2196 Logger::cout() << "baseReg: " << operand->baseReg << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2197 Logger::cout() << "segmentPrefix: " << operand->segmentPrefix << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2198 Logger::cout() << "constDisplacement: " << operand->constDisplacement << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2199 for (int i = 0; i < operand->symbolDisplacement.dim; i++) { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2200 Expression* expr = (Expression*) operand->symbolDisplacement.data[i]; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2201 Logger::cout() << "symbolDisplacement[" << i << "] = " << expr->toChars() << '\n'; |
1096
25d3aaf9e058
Fix FS:4 miswrite due to earlier changes for a constant displacement
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1095
diff
changeset
|
2202 } |
1093
cb868105a6b5
Change x64 asm in Cache.d from a positive offset from after rbp "-20(%rbp)+4" to before
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1091
diff
changeset
|
2203 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2204 if ( operand->segmentPrefix != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2205 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2206 writeReg ( operand->segmentPrefix ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2207 insnTemplate << ':'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2208 } |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2209 if ( (operand->segmentPrefix != Reg_Invalid && operand->symbolDisplacement.dim == 0) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2210 || operand->constDisplacement ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2211 { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2212 insnTemplate << operand->constDisplacement; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2213 if ( operand->symbolDisplacement.dim ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2214 { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2215 insnTemplate << '+'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2216 } |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2217 operand->constDisplacement = 0; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2218 //addOperand(fmt, Arg_Integer, newIntExp(operand->constDisplacement), asmcode); |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2219 if ( opInfo->operands[i] & Opr_Dest ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2220 asmcode->clobbersMemory = 1; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2221 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2222 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2223 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2224 Expression * e = ( Expression * ) operand->symbolDisplacement.data[0]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2225 Declaration * decl = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2226 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2227 if ( e->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2228 decl = ( ( VarExp * ) e )->var; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2229 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2230 if ( operand->baseReg != Reg_Invalid && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2231 decl && ! decl->isDataseg() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2232 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2233 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2234 // Use the offset from frame pointer |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2235 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2236 /* GCC doesn't give the front end access to stack offsets |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2237 when optimization is turned on (3.x) or at all (4.x). |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2238 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2239 Try to convert var[EBP] (or var[ESP] for naked funcs) to |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2240 a memory expression that does not require us to know |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2241 the stack offset. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2242 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2243 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2244 if ( operand->indexReg == Reg_Invalid && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2245 decl->isVarDeclaration() && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2246 ( ( ( operand->baseReg == Reg_EBP || ( operand->baseReg == Reg_RBP ) ) && ! sc->func->naked ) || |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2247 ( ( operand->baseReg == Reg_ESP || ( operand->baseReg == Reg_RSP ) ) && ! sc->func->naked ) ) ) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2248 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2249 |
1053
11e28922ac76
Always pass an address expression (not a var expression) to asm operands of
Frits van Bommel <fvbommel wxs.nl>
parents:
1016
diff
changeset
|
2250 e = new AddrExp ( 0, e ); |
11e28922ac76
Always pass an address expression (not a var expression) to asm operands of
Frits van Bommel <fvbommel wxs.nl>
parents:
1016
diff
changeset
|
2251 e->type = decl->type->pointerTo(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2252 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2253 #if !IN_LLVM |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2254 /* DMD uses the same frame offsets for naked functions. */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2255 if ( sc->func->naked ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2256 operand->constDisplacement += 4; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2257 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2258 if ( operand->constDisplacement ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2259 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2260 e = new AddExp ( 0, e, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2261 new IntegerExp ( 0, operand->constDisplacement, |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2262 Type::tint64 ) ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2263 e->type = decl->type->pointerTo(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2264 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2265 e = new PtrExp ( 0, e ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2266 e->type = decl->type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2267 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2268 operand->constDisplacement = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2269 operand->baseReg = Reg_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2270 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2271 addOperand ( fmt, Arg_Memory, e, asmcode, mode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2272 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2273 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2274 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2275 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2276 // FIXME: what is this ? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2277 addOperand2 ( "${",":a}", Arg_FrameRelative, e, asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2278 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2279 if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2280 asmcode->clobbersMemory = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2281 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2282 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2283 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2284 // Plain memory reference to variable |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2285 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2286 /* If in a reg, DMD moves to memory.. even with -O, so we'll do the same |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2287 by always using the "m" contraint. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2288 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2289 In order to get the correct output for function and label symbols, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2290 the %an format must be used with the "p" constraint. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2291 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2292 if ( isDollar ( e ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2293 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2294 error ( "dollar labels are not supported", stmt->loc.toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2295 asmcode->dollarLabel = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2296 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2297 else if ( e->op == TOKdsymbol ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2298 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2299 LabelDsymbol * lbl = ( LabelDsymbol * ) ( ( DsymbolExp * ) e )->s; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2300 stmt->isBranchToLabel = lbl->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2301 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2302 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2303 addLabel ( lbl->ident->toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2304 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2305 else if ( ( decl && decl->isCodeseg() ) ) // if function or label |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2306 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2307 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2308 // simply write out the mangle |
1190
ea7b8b6c96c0
Some more fixups for mingw -- missing underscores
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1109
diff
changeset
|
2309 // on osx and windows, prepend extra _ |
ea7b8b6c96c0
Some more fixups for mingw -- missing underscores
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1109
diff
changeset
|
2310 if ( global.params.os == OSMacOSX || global.params.os == OSWindows ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2311 insnTemplate << "_"; |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2312 insnTemplate << decl->mangle(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2313 // addOperand2("${", ":c}", Arg_Pointer, e, asmcode); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2314 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2315 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2316 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2317 if ( use_star ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2318 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2319 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2320 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2321 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2322 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2323 if ( !sc->func->naked ) // no addrexp in naked asm please :) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2324 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2325 Type* tt = e->type->pointerTo(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2326 e = new AddrExp ( 0, e ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2327 e->type = tt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2328 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2329 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2330 addOperand ( fmt, Arg_Memory, e, asmcode, mode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2331 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2332 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2333 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2334 if ( use_star ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2335 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2336 if ( operand->baseReg != Reg_Invalid || operand->indexReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2337 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2338 insnTemplate << '('; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2339 if ( operand->baseReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2340 writeReg ( operand->baseReg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2341 if ( operand->indexReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2342 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2343 insnTemplate << ','; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2344 writeReg ( operand->indexReg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2345 if ( operand->scale ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2346 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2347 insnTemplate << "," << operand->scale; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2348 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2349 } |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2350 insnTemplate << ')'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2351 if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2352 asmcode->clobbersMemory = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2353 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2354 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2355 case Opr_Invalid: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2356 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2357 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2358 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2359 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2360 asmcode->insnTemplate = insnTemplate.str(); |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2361 Logger::cout() << "insnTemplate = " << asmcode->insnTemplate << '\n'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2362 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2363 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2364 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2365 bool isIntExp ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2366 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2367 if ( exp->op == TOKint64 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2368 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2369 if ( exp->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2370 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2371 Declaration * v = ( ( VarExp * ) exp )->var; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2372 if ( v->isConst() && v->type->isintegral() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2373 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2374 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2375 return 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2376 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2377 bool isRegExp ( Expression * exp ) { return exp->op == TOKmod; } // ewww.%% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2378 bool isLocalSize ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2379 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2380 // cleanup: make a static var |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2381 return exp->op == TOKidentifier && ( ( IdentifierExp * ) exp )->ident == Id::__LOCAL_SIZE; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2382 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2383 bool isDollar ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2384 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2385 return exp->op == TOKidentifier && ( ( IdentifierExp * ) exp )->ident == Id::__dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2386 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2387 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2388 Expression * newRegExp ( int regno ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2389 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2390 IntegerExp * e = new IntegerExp ( regno ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2391 e->op = TOKmod; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2392 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2393 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2394 |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2395 Expression * newIntExp ( long v /* %% type */ ) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2396 { |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2397 // Handle 64 bit ... incoming long may need to be 'long long' for Windows??? |
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2398 return new IntegerExp ( stmt->loc, v, Type::tint64 ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2399 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2400 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2401 void slotExp ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2402 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2403 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2404 if offset, make a note |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2405 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2406 if integer, add to immediate |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2407 if reg: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2408 if not in bracket, set reg (else error) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2409 if in bracket: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2410 if not base, set base |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2411 if not index, set index |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2412 else, error |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2413 if symbol: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2414 set symbol field |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2415 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2416 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2417 bool is_offset = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2418 if ( exp->op == TOKaddress ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2419 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2420 exp = ( ( AddrExp * ) exp )->e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2421 is_offset = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2422 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2423 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2424 if ( isIntExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2425 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2426 if ( is_offset ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2427 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2428 operand->constDisplacement += exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2429 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2430 operand->hasNumber = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2431 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2432 else if ( isRegExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2433 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2434 if ( is_offset ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2435 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2436 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2437 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2438 if ( operand->reg == Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2439 operand->reg = ( Reg ) exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2440 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2441 stmt->error ( "too many registers in operand (use brackets)" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2442 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2443 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2444 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2445 if ( operand->baseReg == Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2446 operand->baseReg = ( Reg ) exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2447 else if ( operand->indexReg == Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2448 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2449 operand->indexReg = ( Reg ) exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2450 operand->scale = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2451 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2452 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2453 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2454 stmt->error ( "too many registers memory operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2455 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2456 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2457 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2458 else if ( exp->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2459 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2460 VarDeclaration * v = ( ( VarExp * ) exp )->var->isVarDeclaration(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2461 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2462 if ( v && v->storage_class & STCfield ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2463 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2464 operand->constDisplacement += v->offset; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2465 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2466 operand->hasNumber = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2467 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2468 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2469 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2470 if ( v && v->type->isscalar() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2471 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2472 // DMD doesn't check Tcomplex*, and counts Tcomplex32 as Tfloat64 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2473 TY ty = v->type->toBasetype()->ty; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2474 operand->dataSizeHint = ty == Tfloat80 || ty == Timaginary80 ? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2475 Extended_Ptr : ( PtrType ) v->type->size ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2476 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2477 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2478 if ( ! operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2479 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2480 if ( is_offset && ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2481 operand->isOffset = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2482 operand->symbolDisplacement.push ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2483 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2484 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2485 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2486 stmt->error ( "too many symbols in operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2487 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2488 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2489 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2490 else if ( exp->op == TOKidentifier || exp->op == TOKdsymbol ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2491 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2492 // %% localsize could be treated as a simple constant.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2493 // change to addSymbolDisp(e) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2494 if ( ! operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2495 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2496 operand->symbolDisplacement.push ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2497 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2498 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2499 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2500 stmt->error ( "too many symbols in operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2501 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2502 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2503 else if ( exp == Handled ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2504 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2505 // nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2506 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2507 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2508 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2509 stmt->error ( "invalid operand" ); |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2510 } |
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2511 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2512 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2513 void invalidExpression() |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2514 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2515 // %% report operand number |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2516 stmt->error ( "invalid expression" ); |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2517 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2518 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2519 Expression * intOp ( TOK op, Expression * e1, Expression * e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2520 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2521 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2522 if ( isIntExp ( e1 ) && ( ! e2 || isIntExp ( e2 ) ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2523 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2524 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2525 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2526 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2527 if ( e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2528 e = new AddExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2529 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2530 e = e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2531 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2532 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2533 if ( e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2534 e = new MinExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2535 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2536 e = new NegExp ( stmt->loc, e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2537 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2538 case TOKmul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2539 e = new MulExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2540 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2541 case TOKdiv: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2542 e = new DivExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2543 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2544 case TOKmod: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2545 e = new ModExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2546 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2547 case TOKshl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2548 e = new ShlExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2549 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2550 case TOKshr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2551 e = new ShrExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2552 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2553 case TOKushr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2554 e = new UshrExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2555 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2556 case TOKnot: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2557 e = new NotExp ( stmt->loc, e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2558 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2559 case TOKtilde: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2560 e = new ComExp ( stmt->loc, e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2561 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2562 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2563 assert ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2564 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2565 e = e->semantic ( sc ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2566 return e->optimize ( WANTvalue | WANTinterpret ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2567 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2568 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2569 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2570 stmt->error ( "expected integer operand(s) for '%s'", Token::tochars[op] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2571 return newIntExp ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2572 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2573 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2574 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2575 void parseOperand() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2576 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2577 Expression * exp = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2578 slotExp ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2579 if ( isRegExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2580 operand->dataSize = ( PtrType ) regInfo[exp->toInteger() ].size; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2581 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2582 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2583 Expression * parseAsmExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2584 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2585 return parseShiftExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2586 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2587 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2588 Expression * parseShiftExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2589 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2590 Expression * e1 = parseAddExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2591 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2592 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2593 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2594 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2595 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2596 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2597 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2598 case TOKshl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2599 case TOKshr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2600 case TOKushr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2601 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2602 e2 = parseAddExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2603 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2604 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2605 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2606 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2607 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2608 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2609 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2610 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2611 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2612 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2613 Expression * parseAddExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2614 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2615 Expression * e1 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2616 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2617 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2618 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2619 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2620 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2621 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2622 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2623 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2624 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2625 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2626 if ( isIntExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2627 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2628 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2629 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2630 slotExp ( e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2631 slotExp ( e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2632 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2633 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2634 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2635 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2636 // Note: no support for symbol address difference |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2637 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2638 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2639 if ( isIntExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2640 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2641 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2642 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2643 slotExp ( e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2644 e2 = intOp ( TOKmin, e2, NULL ); // verifies e2 is an int |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2645 slotExp ( e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2646 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2647 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2648 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2649 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2650 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2651 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2652 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2653 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2654 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2655 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2656 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2657 bool tryScale ( Expression * e1, Expression * e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2658 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2659 Expression * et; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2660 if ( isIntExp ( e1 ) && isRegExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2661 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2662 et = e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2663 e1 = e2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2664 e2 = et; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2665 goto do_scale; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2666 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2667 else if ( isRegExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2668 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2669 do_scale: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2670 if ( ! operand->inBracket ) |
221
68687d8c3e9a
[svn r237] some inline asm output now seems to work, see tangotests/asm2.d
lindquist
parents:
220
diff
changeset
|
2671 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2672 invalidExpression(); // maybe should allow, e.g. DS:EBX+EAX*4 |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2673 } |
222
251548c1035d
[svn r238] use *m for memory input constraints and pass in their address
ChristianK
parents:
221
diff
changeset
|
2674 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2675 if ( operand->scale || operand->indexReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2676 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2677 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2678 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2679 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2680 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2681 operand->indexReg = ( Reg ) e1->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2682 operand->scale = e2->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2683 switch ( operand->scale ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2684 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2685 case 1: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2686 case 2: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2687 case 4: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2688 case 8: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2689 // ok; do nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2690 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2691 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2692 stmt->error ( "invalid index register scale '%d'", operand->scale ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2693 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2694 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2695 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2696 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2697 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2698 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2699 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2700 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2701 Expression * parseMultExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2702 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2703 Expression * e1 = parseBrExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2704 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2705 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2706 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2707 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2708 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2709 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2710 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2711 case TOKmul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2712 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2713 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2714 if ( isIntExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2715 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2716 else if ( tryScale ( e1,e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2717 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2718 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2719 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2720 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2721 case TOKdiv: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2722 case TOKmod: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2723 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2724 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2725 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2726 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2727 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2728 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2729 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2730 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2731 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2732 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2733 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2734 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2735 Expression * parseBrExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2736 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2737 // %% check (why is bracket lower precends..) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2738 // 3+4[eax] -> 3 + (4 [EAX]) .. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2739 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2740 // only one bracked allowed, so this doesn't quite handle |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2741 // the spec'd syntax |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2742 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2743 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2744 if ( token->value == TOKlbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2745 e = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2746 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2747 e = parseUnaExp(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2748 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2749 // DMD allows multiple bracket expressions. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2750 while ( token->value == TOKlbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2751 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2752 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2753 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2754 operand->inBracket = operand->hasBracket = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2755 slotExp ( parseAsmExp() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2756 operand->inBracket = 0; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2757 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2758 if ( token->value == TOKrbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2759 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2760 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2761 stmt->error ( "missing ']'" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2762 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2763 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2764 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2765 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2766 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2767 PtrType isPtrType ( Token * tok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2768 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2769 switch ( tok->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2770 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2771 case TOKint8: return Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2772 case TOKint16: return Short_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2773 case TOKint32: return Int_Ptr; |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2774 case TOKint64: return QWord_Ptr; |
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2775 // 'long ptr' isn't accepted? (it is now for x64 - qword) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2776 case TOKfloat32: return Float_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2777 case TOKfloat64: return Double_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2778 case TOKfloat80: return Extended_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2779 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2780 for ( int i = 0; i < N_PtrNames; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2781 if ( tok->ident == ptrTypeIdentTable[i] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2782 return ptrTypeValueTable[i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2783 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2784 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2785 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2786 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2787 return Default_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2788 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2789 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2790 Expression * parseUnaExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2791 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2792 Expression * e = NULL; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2793 PtrType ptr_type; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2794 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2795 // First, check for type prefix. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2796 if ( token->value != TOKeof && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2797 peekToken()->value == TOKidentifier && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2798 peekToken()->ident == Id::ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2799 { |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2800 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2801 ptr_type = isPtrType ( token ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2802 if ( ptr_type != Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2803 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2804 if ( operand->dataSize == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2805 operand->dataSize = ptr_type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2806 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2807 stmt->error ( "multiple specifications of operand size" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2808 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2809 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2810 stmt->error ( "unknown operand size '%s'", token->toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2811 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2812 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2813 return parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2814 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2815 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2816 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2817 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2818 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2819 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2820 if ( token->ident == ident_seg ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2821 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2822 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2823 stmt->error ( "'seg' not supported" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2824 e = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2825 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2826 else if ( token->ident == Id::offset || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2827 token->ident == Id::offsetof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2828 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2829 if ( token->ident == Id::offset && ! global.params.useDeprecated ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2830 stmt->error ( "offset deprecated, use offsetof" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2831 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2832 e = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2833 e = new AddrExp ( stmt->loc, e ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2834 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2835 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2836 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2837 // primary exp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2838 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2839 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2840 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2841 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2842 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2843 case TOKnot: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2844 case TOKtilde: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2845 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2846 e = parseUnaExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2847 return intOp ( tv, e, NULL ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2848 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2849 // primary exp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2850 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2851 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2852 return parsePrimaryExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2853 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2854 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2855 Expression * parsePrimaryExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2856 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2857 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2858 Identifier * ident = NULL; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2859 |
1304
b995c146366e
Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents:
1303
diff
changeset
|
2860 // get rid of short/long prefixes for branches |
b995c146366e
Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents:
1303
diff
changeset
|
2861 if (opTakesLabel() && (token->value == TOKint16 || token->value == TOKint64)) |
b995c146366e
Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents:
1303
diff
changeset
|
2862 nextToken(); |
b995c146366e
Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents:
1303
diff
changeset
|
2863 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2864 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2865 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2866 case TOKint32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2867 case TOKuns32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2868 case TOKint64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2869 case TOKuns64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2870 // semantic here? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2871 // %% for tok64 really should use 64bit type |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2872 e = new IntegerExp ( stmt->loc, token->uns64value, Type::tint64 ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2873 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2874 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2875 case TOKfloat32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2876 case TOKfloat64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2877 case TOKfloat80v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2878 // %% need different types? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2879 e = new RealExp ( stmt->loc, token->float80value, Type::tfloat80 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2880 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2881 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2882 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2883 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2884 ident = token->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2885 nextToken(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2886 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2887 if ( ident == Id::__LOCAL_SIZE ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2888 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2889 return new IdentifierExp ( stmt->loc, ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2890 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2891 else if ( ident == Id::__dollar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2892 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2893 do_dollar: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2894 return new IdentifierExp ( stmt->loc, ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2895 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2896 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2897 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2898 e = new IdentifierExp ( stmt->loc, ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2899 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2900 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2901 // If this is more than one component ref, it gets complicated: *(&Field + n) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2902 // maybe just do one step at a time.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2903 // simple case is Type.f -> VarDecl(field) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2904 // actually, DMD only supports on level... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2905 // X.y+Y.z[EBX] is supported, tho.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2906 // %% doesn't handle properties (check%%) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2907 while ( token->value == TOKdot ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2908 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2909 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2910 if ( token->value == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2911 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2912 e = new DotIdExp ( stmt->loc, e, token->ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2913 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2914 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2915 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2916 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2917 stmt->error ( "expected identifier" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2918 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2919 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2920 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2921 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2922 // check for reg first then dotexp is an error? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2923 if ( e->op == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2924 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2925 for ( int i = 0; i < N_Regs; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2926 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2927 if ( ident == regInfo[i].ident ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2928 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2929 if ( ( Reg ) i == Reg_ST && token->value == TOKlparen ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2930 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2931 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2932 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2933 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2934 case TOKint32v: case TOKuns32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2935 case TOKint64v: case TOKuns64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2936 if ( token->uns64value < 8 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2937 e = newRegExp ( ( Reg ) ( Reg_ST + token->uns64value ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2938 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2939 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2940 stmt->error ( "invalid floating point register index" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2941 e = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2942 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2943 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2944 if ( token->value == TOKrparen ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2945 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2946 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2947 stmt->error ( "expected ')'" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2948 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2949 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2950 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2951 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2952 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2953 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2954 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2955 else if ( token->value == TOKcolon ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2956 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2957 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2958 if ( operand->segmentPrefix != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2959 stmt->error ( "too many segment prefixes" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2960 else if ( i >= Reg_CS && i <= Reg_GS ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2961 operand->segmentPrefix = ( Reg ) i; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2962 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2963 stmt->error ( "'%s' is not a segment register", ident->string ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2964 return parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2965 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2966 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2967 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2968 return newRegExp ( ( Reg ) i ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2969 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2970 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2971 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2972 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2973 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2974 if ( opTakesLabel() /*opInfo->takesLabel()*/ && e->op == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2975 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2976 // DMD uses labels secondarily to other symbols, so check |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2977 // if IdentifierExp::semantic won't find anything. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2978 Dsymbol *scopesym; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2979 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2980 if ( ! sc->search ( stmt->loc, ident, & scopesym ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2981 return new DsymbolExp ( stmt->loc, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2982 sc->func->searchLabel ( ident ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2983 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2984 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2985 e = e->semantic ( sc ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2986 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2987 // Special case for floating point constant declarations. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2988 if ( e->op == TOKfloat64 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2989 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2990 Dsymbol * sym = sc->search ( stmt->loc, ident, NULL ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2991 if ( sym ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2992 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2993 VarDeclaration *v = sym->isVarDeclaration(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2994 if ( v ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2995 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2996 Expression *ve = new VarExp ( stmt->loc, v ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2997 ve->type = e->type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2998 e = ve; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2999 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3000 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3001 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3002 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3003 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3004 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3005 case TOKdollar: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3006 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3007 ident = Id::__dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3008 goto do_dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3009 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3010 default: |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
3011 if ( op == Op_FMath0 || op == Op_FdST0ST1 || op == Op_FMath ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
3012 return Handled; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3013 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3014 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3015 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3016 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3017 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3018 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3019 void doAlign() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3020 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3021 // .align bits vs. bytes... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3022 // apparently a.out platforms use bits instead of bytes... |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3023 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3024 // parse primary: DMD allows 'MyAlign' (const int) but not '2+2' |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3025 // GAS is padding with NOPs last time I checked. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3026 Expression * e = parseAsmExp()->optimize ( WANTvalue | WANTinterpret ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3027 uinteger_t align = e->toUInteger(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3028 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3029 if ( ( align & ( align - 1 ) ) == 0 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3030 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3031 //FIXME: This printf is not portable. The use of `align` varies from system to system; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3032 // on i386 using a.out, .align `n` will align on a 2^`n` boundary instead of an `n` boundary |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3033 #ifdef HAVE_GAS_BALIGN_AND_P2ALIGN |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3034 insnTemplate << ".balign\t" << align; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3035 #else |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3036 insnTemplate << ".align\t" << align; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3037 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3038 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3039 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3040 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3041 stmt->error ( "alignment must be a power of 2, not %u", ( unsigned ) align ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3042 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3043 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3044 setAsmCode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3045 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3046 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3047 void doEven() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3048 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3049 // .align for GAS is in bits, others probably use bytes.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3050 #ifdef HAVE_GAS_BALIGN_AND_P2ALIGN |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3051 insnTemplate << ".align\t2"; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3052 #else |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3053 insnTemplate << ".align\t2"; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3054 #endif |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3055 setAsmCode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3056 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3057 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3058 void doNaked() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3059 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3060 // %% can we assume sc->func != 0? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3061 sc->func->naked = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3062 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3063 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3064 void doData() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3065 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3066 static const char * directives[] = { ".byte", ".short", ".long", ".long", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3067 "", "", "" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3068 }; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3069 // FIXME |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3070 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3071 machine_mode mode; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3072 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3073 insnTemplate->writestring((char*) directives[op - Op_db]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3074 insnTemplate->writebyte(' '); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3075 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3076 do { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3077 // DMD is pretty strict here, not even constant expressions are allowed.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3078 switch (op) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3079 case Op_db: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3080 case Op_ds: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3081 case Op_di: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3082 case Op_dl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3083 if (token->value == TOKint32v || token->value == TOKuns32v || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3084 token->value == TOKint64v || token->value == TOKuns64v) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3085 // As per usual with GNU, assume at least 32-bit host |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3086 if (op != Op_dl) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3087 insnTemplate->printf("%u", (d_uns32) token->uns64value); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3088 else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3089 // Output two .longS. GAS has .quad, but would have to rely on 'L' format .. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3090 // just need to use HOST_WIDE_INT_PRINT_DEC |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3091 insnTemplate->printf("%u,%u", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3092 (d_uns32) token->uns64value, (d_uns32) (token->uns64value >> 32)); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3093 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3094 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3095 stmt->error("expected integer constant"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3096 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3097 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3098 case Op_df: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3099 mode = SFmode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3100 goto do_float; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3101 case Op_dd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3102 mode = DFmode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3103 goto do_float; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3104 case Op_de: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3105 #ifndef TARGET_80387 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3106 #define XFmode TFmode |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3107 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3108 mode = XFmode; // not TFmode |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3109 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3110 do_float: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3111 if (token->value == TOKfloat32v || token->value == TOKfloat64v || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3112 token->value == TOKfloat80v) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3113 long words[3]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3114 real_to_target(words, & token->float80value.rv(), mode); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3115 // don't use directives..., just use .long like GCC |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3116 insnTemplate->printf(".long\t%u", words[0]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3117 if (mode != SFmode) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3118 insnTemplate->printf(",%u", words[1]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3119 // DMD outputs 10 bytes, so we need to switch to .short here |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3120 if (mode == XFmode) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3121 insnTemplate->printf("\n\t.short\t%u", words[2]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3122 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3123 stmt->error("expected float constant"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3124 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3125 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3126 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3127 abort(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3128 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3129 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3130 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3131 if (token->value == TOKcomma) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3132 insnTemplate->writebyte(','); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3133 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3134 } else if (token->value == TOKeof) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3135 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3136 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3137 stmt->error("expected comma"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3138 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3139 } while (1); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3140 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3141 setAsmCode();*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3142 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3143 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3144 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3145 #if D_GCC_VER < 40 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3146 // struct rtx was modified for c++; this macro from rtl.h needs to |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3147 // be modified accordingly. |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3148 #undef XEXP |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3149 #define XEXP(RTX, N) (RTL_CHECK2 (RTX, N, 'e', 'u').rt_rtx) |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3150 #endif |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3151 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3152 // FIXME |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3153 #define HOST_WIDE_INT long |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3154 bool getFrameRelativeValue ( LLValue* decl, HOST_WIDE_INT * result ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3155 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3156 assert ( 0 ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3157 // FIXME |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3158 // // Using this instead of DECL_RTL for struct args seems like a |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3159 // // good way to get hit by a truck because it may not agree with |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3160 // // non-asm access, but asm code wouldn't know what GCC does anyway. */ |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3161 // rtx r = DECL_INCOMING_RTL(decl); |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3162 // rtx e1, e2; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3163 // |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3164 // // Local variables don't have DECL_INCOMING_RTL |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3165 // if (r == NULL_RTX) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3166 // r = DECL_RTL(decl); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3167 // |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3168 // if (r != NULL_RTX && GET_CODE(r) == MEM /* && r->frame_related */ ) { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3169 // r = XEXP(r, 0); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3170 // if (GET_CODE(r) == PLUS) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3171 // e1 = XEXP(r, 0); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3172 // e2 = XEXP(r, 1); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3173 // if (e1 == virtual_incoming_args_rtx && GET_CODE(e2) == CONST_INT) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3174 // *result = INTVAL(e2) + 8; // %% 8 is 32-bit specific... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3175 // return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3176 // } else if (e1 == virtual_stack_vars_rtx && GET_CODE(e2) == CONST_INT) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3177 // *result = INTVAL(e2); // %% 8 is 32-bit specific... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3178 // return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3179 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3180 // } else if (r == virtual_incoming_args_rtx) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3181 // *result = 8; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3182 // return true; // %% same as above |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3183 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3184 // // shouldn't have virtual_stack_vars_rtx by itself |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3185 // } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3186 // |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3187 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3188 } |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3189 |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3190 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3191 struct AsmParser : public AsmParserCommon |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3192 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3193 virtual void run ( Scope* sc, AsmStatement* asmst ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3194 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3195 AsmProcessor ap ( sc, asmst ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3196 ap.run(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3197 } |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3198 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3199 virtual std::string getRegName ( int i ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3200 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3201 return regInfo[i].gccName; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3202 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3203 }; |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3204 |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3205 } |