Mercurial > projects > ldc
annotate gen/asm-x86-64.h @ 1083:c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
previous code that allowed dual operand form of fstp but dissallowed the single
operand form accidently
author | Kelly Wilson <wilsonk cpsc.ucalgary.ca> |
---|---|
date | Tue, 10 Mar 2009 06:23:26 -0600 |
parents | 9c63438c3207 |
children | 8cb5b746500c |
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, |
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
|
20 Reg_ST, Reg_ST0, |
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 |
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
|
48 static const int N_Regs = /*gp*/ 8 + /*fp*/ 9 + /*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 }, |
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
|
81 { "ST(0)", NULL_TREE, NULL, 10, Reg_ST0 }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
82 { "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
|
83 { "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
|
84 { "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
|
85 { "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
|
86 { "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
|
87 { "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
|
88 { "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
|
89 { "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
|
90 { "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
|
91 { "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
|
92 { "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
|
93 { "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
|
94 { "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
|
95 { "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
|
96 { "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
|
97 { "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
|
98 { "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
|
99 { "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
|
100 { "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
|
101 { "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
|
102 { "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
|
103 { "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
|
104 { "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
|
105 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
106 { "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
|
107 { "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
|
108 { "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
|
109 { "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
|
110 { "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
|
111 { "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
|
112 { "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
|
113 { "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
|
114 { "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
|
115 { "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
|
116 { "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
|
117 { "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
|
118 { "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
|
119 { "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
|
120 { "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
|
121 { "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
|
122 { "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
|
123 { "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
|
124 { "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
|
125 { "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
|
126 { "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
|
127 { "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
|
128 { "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
|
129 { "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
|
130 { "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
|
131 { "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
|
132 { "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
|
133 { "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
|
134 { "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
|
135 { "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
|
136 { "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
|
137 { "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
|
138 { "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
|
139 { "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
|
140 { "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
|
141 { "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
|
142 { "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
|
143 { "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
|
144 { "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
|
145 { "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
|
146 { "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
|
147 { "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
|
148 { "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
|
149 { "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
|
150 { "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
|
151 { "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
|
152 { "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
|
153 { "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
|
154 { "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
|
155 { "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
|
156 { "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
|
157 { "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
|
158 { "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
|
159 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
160 { "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
|
161 { "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
|
162 { "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
|
163 { "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
|
164 { "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
|
165 { "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
|
166 { "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
|
167 { "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
|
168 { "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
|
169 { "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
|
170 { "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
|
171 { "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
|
172 { "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
|
173 { "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
|
174 { "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
|
175 { "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
|
176 { "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
|
177 { "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
|
178 { "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
|
179 { "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
|
180 { "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
|
181 { "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
|
182 { "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
|
183 { "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
|
184 { "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
|
185 { "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
|
186 { "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
|
187 { "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
|
188 { "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
|
189 { "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
|
190 { "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
|
191 { "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
|
192 { "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
|
193 { "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
|
194 { "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
|
195 { "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
|
196 { "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
|
197 { "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
|
198 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
199 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
200 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
201 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
202 No_Type_Needed, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
203 Int_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
204 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
|
205 FP_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
206 FPInt_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
207 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
|
208 } TypeNeeded; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
209 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
210 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
211 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
212 No_Link, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
213 Out_Mnemonic, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
214 Next_Form |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
215 } OpLink; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
216 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
217 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
218 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
219 Clb_SizeAX = 0x01, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
220 Clb_SizeDXAX = 0x02, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
221 Clb_EAX = 0x03, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
222 Clb_DXAX_Mask = 0x03, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
223 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
224 Clb_Flags = 0x04, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
225 Clb_DI = 0x08, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
226 Clb_SI = 0x10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
227 Clb_CX = 0x20, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
228 Clb_ST = 0x40, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
229 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
|
230 } ImplicitClober; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
231 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
232 // "^ +/..\([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
|
233 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
234 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
235 Op_Invalid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
236 Op_Adjust, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
237 Op_Dst, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
238 Op_Upd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
239 Op_DstW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
240 Op_DstF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
241 Op_UpdF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
242 Op_DstSrc, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
243 Op_DstSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
244 Op_UpdSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
245 Op_DstSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
246 Op_UpdSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
247 Op_DstSrcSSE, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
248 Op_DstSrcMMX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
249 Op_DstSrcImmS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
250 Op_DstSrcImmM, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
251 Op_UpdSrcShft, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
252 Op_DstSrcNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
253 Op_UpdSrcNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
254 Op_DstMemNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
255 Op_DstRMBNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
256 Op_DstRMWNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
257 Op_UpdUpd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
258 Op_UpdUpdF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
259 Op_Src, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
260 Op_SrcRMWNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
261 Op_SrcW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
262 Op_SrcImm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
263 Op_Src_DXAXF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
264 Op_SrcMemNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
265 Op_SrcMemNTF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
266 Op_SrcSrc, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
267 Op_SrcSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
268 Op_SrcSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
269 Op_SrcSrcSSEF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
270 Op_SrcSrcMMX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
271 Op_Shift, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
272 Op_Branch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
273 Op_CBranch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
274 Op_0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
275 Op_0_AX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
276 Op_0_DXAX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
277 Op_Loop, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
278 Op_Flags, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
279 Op_F0_ST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
280 Op_F0_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
281 Op_Fs_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
282 Op_Fis, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
283 Op_Fis_ST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
284 Op_Fis_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
285 Op_Fid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
286 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
|
287 Op_FidR_P, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
288 Op_Ffd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
289 Op_FfdR, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
290 Op_Ffd_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
291 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
|
292 Op_FfdRR_P, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
293 Op_Fd_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
294 Op_FdST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
295 Op_FMath, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
296 Op_FdSTiSTi, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
297 Op_FPMath, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
298 Op_FCmp, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
299 Op_FCmp1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
300 Op_FCmpP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
301 Op_FCmpP1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
302 Op_FCmpFlg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
303 Op_FCmpFlgP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
304 Op_fld, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
305 Op_fldR, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
306 Op_fxch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
307 Op_fxch1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
308 Op_fxch0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
309 Op_SizedStack, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
310 Op_bound, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
311 Op_bswap, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
312 Op_cmps, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
313 Op_cmpsd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
314 Op_cmpsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
315 Op_cmpxchg8b, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
316 Op_cmpxchg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
317 Op_cpuid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
318 Op_enter, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
319 Op_fdisi, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
320 Op_feni, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
321 Op_fsetpm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
322 Op_fXstsw, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
323 Op_imul, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
324 Op_imul2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
325 Op_imul1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
326 Op_in, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
327 Op_ins, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
328 Op_insX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
329 Op_iret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
330 Op_iretd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
331 Op_lods, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
332 Op_lodsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
333 Op_movs, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
334 Op_movsd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
335 Op_movsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
336 Op_movsx, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
337 Op_movzx, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
338 Op_mul, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
339 Op_out, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
340 Op_outs, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
341 Op_outsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
342 Op_push, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
343 Op_ret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
344 Op_retf, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
345 Op_scas, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
346 Op_scasX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
347 Op_stos, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
348 Op_stosX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
349 Op_xlat, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
350 N_AsmOpInfo, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
351 Op_Align, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
352 Op_Even, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
353 Op_Naked, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
354 Op_db, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
355 Op_ds, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
356 Op_di, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
357 Op_dl, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
358 Op_df, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
359 Op_dd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
360 Op_de |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
361 } AsmOp; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
362 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
363 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
364 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
365 Opr_None = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
366 OprC_MRI = 1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
367 OprC_MR = 2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
368 OprC_Mem = 3, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
369 OprC_Reg = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
370 OprC_Imm = 5, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
371 OprC_SSE = 6, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
372 OprC_SSE_Mem = 7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
373 OprC_R32 = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
374 OprC_RWord = 9, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
375 OprC_RFP = 10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
376 OprC_AbsRel = 11, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
377 OprC_Relative = 12, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
378 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
|
379 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
|
380 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
|
381 OprC_MMX = 16, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
382 OprC_MMX_Mem = 17, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
383 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
|
384 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
385 Opr_ClassMask = 0x1f, |
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_Dest = 0x20, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
388 Opr_Update = 0x60, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
389 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
390 Opr_NoType = 0x80, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
391 } OprVals; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
392 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
393 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
394 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
395 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
396 } AsmOprInfo; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
397 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
398 typedef unsigned char Opr; |
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 struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
401 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
402 Opr operands[3]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
403 unsigned char |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
404 needsType : 3, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
405 implicitClobbers : 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
406 linkType : 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
407 unsigned link; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
408 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
409 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
410 bool takesLabel() { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
411 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
|
412 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
413 */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
414 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
415 unsigned nOperands() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
416 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
417 if ( !operands[0] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
418 return 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
419 else if ( !operands[1] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
420 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
421 else if ( !operands[2] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
422 return 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
423 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
424 return 3; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
425 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
426 } AsmOpInfo; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
427 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
428 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
429 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
430 Mn_fdisi, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
431 Mn_feni, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
432 Mn_fsetpm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
433 Mn_iretw, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
434 Mn_iret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
435 Mn_lret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
436 Mn_cmpxchg8b, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
437 N_AltMn |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
438 } Alternate_Mnemonics; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
439 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
440 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
|
441 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
442 ".byte 0xdb, 0xe1", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
443 ".byte 0xdb, 0xe0", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
444 ".byte 0xdb, 0xe4", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
445 "iretw", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
446 "iret", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
447 "lret", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
448 "cmpxchg8b" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
449 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
450 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
451 #define mri OprC_MRI |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
452 #define mr OprC_MR |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
453 #define mem OprC_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
454 // for now mfp=mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
455 #define mfp OprC_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
456 #define reg OprC_Reg |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
457 #define imm OprC_Imm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
458 #define sse OprC_SSE |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
459 #define ssem OprC_SSE_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
460 #define mmx OprC_MMX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
461 #define mmxm OprC_MMX_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
462 #define r32 OprC_R32 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
463 #define rw OprC_RWord |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
464 #define rfp OprC_RFP |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
465 #define port OprC_Port |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
466 #define ax OprC_AX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
467 #define dx OprC_DX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
468 #define shft OprC_Shift |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
469 #define D Opr_Dest |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
470 #define U Opr_Update |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
471 #define N Opr_NoType |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
472 //#define L Opr_Label |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
473 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
474 // 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
|
475 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
|
476 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
477 /* Op_Invalid */ {}, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
478 /* 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
|
479 /* 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
|
480 /* 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
|
481 /* 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
|
482 /* 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
|
483 /* 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
|
484 /* 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
|
485 /* 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
|
486 /* 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
|
487 /* 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
|
488 /* 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
|
489 /* 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
|
490 /* 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
|
491 /* 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
|
492 /* 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
|
493 /* 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
|
494 /* 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
|
495 /* 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
|
496 /* 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
|
497 /* 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
|
498 /* 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
|
499 /* 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
|
500 /* 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
|
501 /* 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
|
502 /* 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
|
503 /* 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
|
504 /* Op_SrcImm */ { imm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
505 /* 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
|
506 /* 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
|
507 /* 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
|
508 /* 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
|
509 /* 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
|
510 /* 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
|
511 /* 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
|
512 /* Op_SrcSrcMMX */ { mmx, mmx, 0, }, |
961
f33413a955fa
Fix shl/r bad operand size error
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
944
diff
changeset
|
513 /* 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
|
514 /* Op_Branch */ { mri }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
515 /* Op_CBranch */ { imm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
516 /* 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
|
517 /* 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
|
518 /* 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
|
519 /* 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
|
520 /* 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
|
521 /* 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
|
522 /* 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
|
523 /* 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
|
524 /* 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
|
525 /* 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
|
526 /* 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
|
527 /* Op_Fid */ { D|mem, 0, 0, FPInt_Types }, // only 16bit and 32bit, DMD defaults to 16bit |
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
|
528 /* Op_Fid_P */ { D|mem, 0, 0, FPInt_Types, Clb_ST, Op_FidR_P }, // push and pop, fild so also 64 bit |
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
|
529 /* Op_Fid_P */ { D|mem|mem,rfp, 0, 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
|
530 /* 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
|
531 /* 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
|
532 /* 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
|
533 /* Op_FfdR_P */ { D|rfp, 0, 0, 0, Clb_ST, Next_Form, Op_FfdRR_P }, |
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_FfdRR_P */ { D|mfp|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
|
535 /* 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
|
536 /* Op_FdST */ { D|rfp, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
537 /* Op_FMath */ { mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_FdSTiSTi }, // and only single or double prec |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
538 /* Op_FdSTiSTi */ { D|rfp, rfp, 0, }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
539 /* 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
|
540 /* 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
|
541 /* 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
|
542 /* 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
|
543 /* 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
|
544 /* 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
|
545 /* 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
|
546 /* 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
|
547 /* 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
|
548 /* 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
|
549 /* 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
|
550 /* 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
|
551 /* 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
|
552 /* 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
|
553 /* Op_bswap */ { D|r32 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
554 /* 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
|
555 /* 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
|
556 /* 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
|
557 /* 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
|
558 /* 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
|
559 /* 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
|
560 /* 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
|
561 /* 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
|
562 /* 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
|
563 /* 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
|
564 /* 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
|
565 /* 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
|
566 /* 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
|
567 /* 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
|
568 /* 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
|
569 /* 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
|
570 /* 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
|
571 /* 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
|
572 /* 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
|
573 /* 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
|
574 /* 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
|
575 /* 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
|
576 /* 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
|
577 /* 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
|
578 /* 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
|
579 /* 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
|
580 /* 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
|
581 /* 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
|
582 /* 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
|
583 /* 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
|
584 /* 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
|
585 /* 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
|
586 /* 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
|
587 /* 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
|
588 /* 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
|
589 /* 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
|
590 /* 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
|
591 /* 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
|
592 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
593 /// * 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
|
594 /// * 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
|
595 /// * 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
|
596 /// * 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
|
597 /// * 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
|
598 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
599 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
600 #undef mri |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
601 #undef mr |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
602 #undef mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
603 #undef mfp |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
604 #undef reg |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
605 #undef imm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
606 #undef sse |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
607 #undef ssem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
608 #undef mmx |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
609 #undef mmxm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
610 #undef r32 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
611 #undef rw |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
612 #undef rfp |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
613 #undef port |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
614 #undef ax |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
615 #undef dx |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
616 #undef shft |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
617 #undef D |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
618 #undef U |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
619 #undef N |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
620 //#undef L |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
621 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
622 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
623 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
624 const char * inMnemonic; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
625 AsmOp asmOp; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
626 } AsmOpEnt; |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
627 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
628 /* 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
|
629 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
630 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
|
631 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
632 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
|
633 */ |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
634 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
635 static AsmOpEnt opData[] = |
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 { "adc", Op_UpdSrcF }, |
979
523bf4f166bc
Fix some assembler issues:
Frits van Bommel <fvbommel wxs.nl>
parents:
970
diff
changeset
|
638 { "add", Op_UpdSrcF }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
639 { "addpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
640 { "addps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
641 { "addq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
642 { "addsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
643 { "addss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
644 { "addsubpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
645 { "addsubps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
646 { "and", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
647 { "andnpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
648 { "andnps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
649 { "andpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
650 { "andps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
651 { "bsf", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
652 { "bsr", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
653 { "bswap", Op_bswap }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
654 { "bt", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
655 { "btc", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
656 { "btr", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
657 { "bts", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
658 { "call", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
659 { "callf", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
660 { "cbw", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
661 { "cdqe", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
662 { "clc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
663 { "cld", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
664 { "clflush",Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
665 { "cli", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
666 { "clts", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
667 { "cmc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
668 { "cmova", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
669 { "cmovae", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
670 { "cmovb", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
671 { "cmovbe", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
672 { "cmovc", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
673 { "cmove", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
674 { "cmovg", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
675 { "cmovge", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
676 { "cmovl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
677 { "cmovle", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
678 { "cmovna", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
679 { "cmovnae",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
680 { "cmovnb", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
681 { "cmovnbe",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
682 { "cmovnc", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
683 { "cmovne", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
684 { "cmovng", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
685 { "cmovnge",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
686 { "cmovnl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
687 { "cmovnle",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
688 { "cmovno", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
689 { "cmovnp", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
690 { "cmovns", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
691 { "cmovnz", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
692 { "cmovo", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
693 { "cmovp", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
694 { "cmovpe", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
695 { "cmovpo", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
696 { "cmovs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
697 { "cmovz", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
698 { "cmp", Op_SrcSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
699 { "cmppd", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
700 { "cmpps", Op_DstSrcImmS }, |
1016
16e2c750c857
Just forgot an opcode for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
979
diff
changeset
|
701 { "cmpq", Op_DstSrcNT }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
702 { "cmps", Op_cmps }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
703 { "cmpsb", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
704 { "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
|
705 { "cmpss", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
706 { "cmpsw", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
707 { "cmpsq", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
708 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
709 { "cdqe", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
710 { "cmpsq", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
711 { "cmpxch16b", Op_cmpxchg16b }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
712 { "cqo", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
713 { "lodsq", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
714 { "movsq", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
715 { "popfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
716 { "pushfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
717 { "scasq", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
718 { "stosq", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
719 { "iretq", Op_iretd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
720 { "swapgs", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
721 { "extrq", Op_Extrq }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
722 { "movsxq", Op_movsxq }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
723 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
724 { "clgi", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
725 { "invlpga", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
726 { "rdtscp", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
727 { "stgi", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
728 { "sysret", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
729 */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
730 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
731 { "cmpxch16b", Op_cmpxchg8b }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
732 { "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
|
733 { "cmpxchg", Op_cmpxchg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
734 { "comisd", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
735 { "comiss", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
736 { "cpuid", Op_cpuid }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
737 { "cvtdq2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
738 { "cvtdq2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
739 { "cvtpd2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
740 { "cvtpd2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
741 { "cvtpd2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
742 { "cvtpi2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
743 { "cvtpi2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
744 { "cvtps2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
745 { "cvtps2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
746 { "cvtps2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
747 { "cvtsd2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
748 { "cvtsd2ss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
749 { "cvtsi2sd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
750 { "cvtsi2ss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
751 { "cvtss2sd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
752 { "cvtss2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
753 { "cvttpd2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
754 { "cvttpd2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
755 { "cvttps2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
756 { "cvttps2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
757 { "cvttsd2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
758 { "cvttss2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
759 { "cwd", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
760 { "cwde", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
761 //{ "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
|
762 { "db", Op_db }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
763 { "dd", Op_dd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
764 { "de", Op_de }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
765 { "dec", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
766 { "df", Op_df }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
767 { "di", Op_di }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
768 { "div", Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
769 { "divpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
770 { "divps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
771 { "divsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
772 { "divss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
773 { "dl", Op_dl }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
774 { "dq", Op_dl }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
775 { "ds", Op_ds }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
776 { "dt", Op_de }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
777 { "dw", Op_ds }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
778 { "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
|
779 { "enter", Op_enter }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
780 { "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
|
781 { "fabs", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
782 { "fadd", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
783 { "faddp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
784 { "fbld", Op_Fs_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
785 { "fbstp", Op_Fd_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
786 { "fchs", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
787 { "fclex", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
788 { "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
|
789 { "fcmovbe", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
790 { "fcmove", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
791 { "fcmovnb", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
792 { "fcmovnbe", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
793 { "fcmovne", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
794 { "fcmovnu", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
795 { "fcmovu", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
796 { "fcom", Op_FCmp }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
797 { "fcomi", Op_FCmpFlg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
798 { "fcomip", Op_FCmpFlgP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
799 { "fcomp", Op_FCmpP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
800 { "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
|
801 { "fcos", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
802 { "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
|
803 { "fdisi", Op_fdisi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
804 { "fdiv", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
805 { "fdivp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
806 { "fdivr", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
807 { "fdivrp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
808 { "feni", Op_feni }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
809 { "ffree", Op_FdST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
810 { "fiadd", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
811 { "ficom", Op_Fis }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
812 { "ficomp", Op_Fis_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
813 { "fidiv", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
814 { "fidivr", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
815 { "fild", Op_Fis_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
816 { "fimul", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
817 { "fincstp",Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
818 { "finit", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
819 { "fist", Op_Fid }, // only 16,32bit |
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
|
820 { "fistp", Op_FidR_P }, |
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
|
821 { "fisttp", Op_FidR_P }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
822 { "fisub", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
823 { "fisubr", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
824 { "fld", Op_fld }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
825 { "fld1", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
826 { "fldcw", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
827 { "fldenv", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
828 { "fldl2e", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
829 { "fldl2t", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
830 { "fldlg2", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
831 { "fldln2", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
832 { "fldpi", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
833 { "fldz", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
834 { "fmul", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
835 { "fmulp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
836 { "fnclex", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
837 { "fndisi", Op_fdisi }, // ?? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
838 { "fneni", Op_feni }, // ?? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
839 { "fninit", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
840 { "fnop", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
841 { "fnsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
842 { "fnstcw", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
843 { "fnstenv",Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
844 { "fnstsw", Op_fXstsw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
845 { "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
|
846 { "fprem", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
847 { "fprem1", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
848 { "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
|
849 { "frndint",Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
850 { "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
|
851 { "fsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
852 { "fscale", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
853 { "fsetpm", Op_fsetpm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
854 { "fsin", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
855 { "fsincos",Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
856 { "fsqrt", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
857 { "fst", Op_Ffd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
858 { "fstcw", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
859 { "fstenv", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
860 { "fstp", Op_Ffd_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
861 { "fstsw", Op_fXstsw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
862 { "fsub", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
863 { "fsubp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
864 { "fsubr", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
865 { "fsubrp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
866 { "ftst", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
867 { "fucom", Op_FCmp }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
868 { "fucomi", Op_FCmpFlg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
869 { "fucomip",Op_FCmpFlgP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
870 { "fucomp", Op_FCmpP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
871 { "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
|
872 { "fwait", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
873 { "fxam", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
874 { "fxch", Op_fxch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
875 { "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
|
876 { "fxsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
877 { "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
|
878 { "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
|
879 { "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
|
880 { "haddpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
881 { "haddps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
882 { "hlt", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
883 { "hsubpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
884 { "hsubps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
885 { "idiv", Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
886 { "imul", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
887 { "in", Op_in }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
888 { "inc", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
889 { "ins", Op_ins }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
890 { "insb", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
891 { "insd", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
892 { "insw", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
893 { "int", Op_SrcImm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
894 { "into", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
895 { "invd", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
896 { "invlpg", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
897 { "iret", Op_iret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
898 { "iretd", Op_iretd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
899 { "iretq", Op_iretd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
900 { "ja", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
901 { "jae", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
902 { "jb", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
903 { "jbe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
904 { "jc", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
905 { "jcxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
906 { "je", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
907 { "jecxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
908 { "jg", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
909 { "jge", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
910 { "jl", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
911 { "jle", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
912 { "jmp", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
913 { "jmpe", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
914 { "jmpf", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
915 { "jna", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
916 { "jnae", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
917 { "jnb", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
918 { "jnbe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
919 { "jnc", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
920 { "jne", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
921 { "jng", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
922 { "jnge", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
923 { "jnl", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
924 { "jnle", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
925 { "jno", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
926 { "jnp", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
927 { "jns", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
928 { "jnz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
929 { "jo", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
930 { "jp", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
931 { "jpe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
932 { "jpo", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
933 { "jrcxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
934 { "js", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
935 { "jz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
936 { "lahf", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
937 { "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
|
938 { "lddqu", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
939 { "ldmxcsr", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
940 { "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
|
941 { "lea", Op_DstSrc }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
942 { "leaq", Op_DstSrcSSE }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
943 { "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
|
944 { "lfence",Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
945 { "lfs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
946 { "lgdt", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
947 { "lgs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
948 { "lidt", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
949 { "lldt", Op_SrcRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
950 { "lmsw", Op_SrcRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
951 { "lock", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
952 { "lods", Op_lods }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
953 { "lodsb", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
954 { "lodsd", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
955 { "lodsw", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
956 { "lodsq", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
957 { "loop", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
958 { "loope", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
959 { "loopne",Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
960 { "loopnz",Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
961 { "loopz", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
962 { "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
|
963 { "lss", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
964 { "ltr", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
965 { "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
|
966 { "maskmovq", Op_SrcSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
967 { "maxpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
968 { "maxps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
969 { "maxsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
970 { "maxss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
971 { "mfence",Op_0}, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
972 { "minpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
973 { "minps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
974 { "minsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
975 { "minss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
976 { "monitor", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
977 { "mov", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
978 { "movapd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
979 { "movaps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
980 { "movb", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
981 { "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
|
982 { "movddup", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
983 { "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
|
984 { "movdqa", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
985 { "movdqu", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
986 { "movhlps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
987 { "movhpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
988 { "movhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
989 { "movl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
990 { "movlhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
991 { "movlpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
992 { "movlps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
993 { "movmskpd",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
994 { "movmskps",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
995 { "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
|
996 { "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
|
997 { "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
|
998 { "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
|
999 { "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
|
1000 { "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
|
1001 { "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
|
1002 { "movs", Op_movs }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1003 { "movsb", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1004 { "movsd", Op_movsd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1005 { "movsq", Op_movsd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1006 { "movshdup", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1007 { "movsldup", Op_DstSrcSSE }, |
970
fb31a4afa2df
Revert wilsonk's "fix" for the callingconv1.d problem.
Frits van Bommel <fvbommel wxs.nl>
parents:
966
diff
changeset
|
1008 { "movss", Op_DstSrcSSE }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1009 { "movsw", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1010 { "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
|
1011 { "movsxd", Op_movsx }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1012 { "movupd",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1013 { "movups",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1014 { "movzbl", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1015 { "movzx", Op_movzx }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1016 { "mul", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1017 { "mulpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1018 { "mulps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1019 { "mulsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1020 { "mulss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1021 { "mwait", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1022 { "naked", Op_Naked }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1023 { "neg", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1024 { "nop", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1025 { "not", Op_Upd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1026 { "or", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1027 { "orpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1028 { "orps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1029 { "out", Op_out }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1030 { "outs", Op_outs }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1031 { "outsb", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1032 { "outsd", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1033 { "outsw", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1034 { "pabsb", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1035 { "pabsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1036 { "pabsq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1037 { "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
|
1038 { "packsswb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1039 { "packuswb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1040 { "paddb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1041 { "paddd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1042 { "paddq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1043 { "paddsb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1044 { "paddsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1045 { "paddusb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1046 { "paddusw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1047 { "paddw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1048 { "palignr", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1049 { "pand", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1050 { "pandn", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1051 { "pause", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1052 { "pavgb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1053 { "pavgw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1054 { "pcmpeqb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1055 { "pcmpeqd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1056 { "pcmpeqw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1057 { "pcmpgtb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1058 { "pcmpgtd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1059 { "pcmpgtw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1060 { "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
|
1061 { "phaddd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1062 { "phaddsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1063 { "phaddw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1064 { "phsubd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1065 { "phsubsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1066 { "phsubw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1067 { "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
|
1068 { "pmaddubsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1069 { "pmaddwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1070 { "pmaxsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1071 { "pmaxub", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1072 { "pminsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1073 { "pminub", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1074 { "pmovmskb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1075 { "pmulhrsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1076 { "pmulhuw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1077 { "pmulhw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1078 { "pmullw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1079 { "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
|
1080 { "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
|
1081 { "popfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1082 { "popq", Op_push }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1083 { "por", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1084 { "prefetchnta", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1085 { "prefetcht0", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1086 { "prefetcht1", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1087 { "prefetcht2", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1088 { "psadbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1089 { "pshufb", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1090 { "pshufd", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1091 { "pshufhw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1092 { "pshuflw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1093 { "pshufw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1094 { "psignb", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1095 { "psignd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1096 { "psignw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1097 { "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
|
1098 { "pslldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1099 { "psllq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1100 { "psllw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1101 { "psrad", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1102 { "psraw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1103 { "psrld", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1104 { "psrldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1105 { "psrlq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1106 { "psrlw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1107 { "psubb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1108 { "psubd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1109 { "psubq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1110 { "psubsb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1111 { "psubsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1112 { "psubusb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1113 { "psubusw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1114 { "psubw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1115 { "punpckhbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1116 { "punpckhdq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1117 { "punpckhqdq",Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1118 { "punpckhwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1119 { "punpcklbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1120 { "punpckldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1121 { "punpcklqdq",Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1122 { "punpcklwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1123 { "pushf", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1124 { "pushfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1125 { "pushq", Op_push }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1126 { "pxor", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1127 { "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
|
1128 { "rcpps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1129 { "rcpss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1130 { "rcr", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1131 { "rdmsr", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1132 { "rdpmc", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1133 { "rdtsc", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1134 { "rep", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1135 { "repe", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1136 { "repne", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1137 { "repnz", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1138 { "repz", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1139 { "ret", Op_ret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1140 { "retf", Op_retf }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1141 { "retn", Op_retf }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1142 { "rol", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1143 { "ror", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1144 { "rsm", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1145 { "rsqrtps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1146 { "rsqrtss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1147 { "sahf", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1148 { "sal", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1149 { "salq", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1150 { "sar", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1151 { "sbb", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1152 { "scas", Op_scas }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1153 { "scasb", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1154 { "scasd", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1155 { "scasw", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1156 { "scasq", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1157 { "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
|
1158 { "setae", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1159 { "setb", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1160 { "setbe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1161 { "setc", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1162 { "sete", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1163 { "setg", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1164 { "setge", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1165 { "setl", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1166 { "setle", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1167 { "setna", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1168 { "setnae", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1169 { "setnb", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1170 { "setnbe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1171 { "setnc", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1172 { "setne", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1173 { "setng", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1174 { "setnge", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1175 { "setnl", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1176 { "setnle", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1177 { "setno", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1178 { "setnp", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1179 { "setns", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1180 { "setnz", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1181 { "seto", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1182 { "setp", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1183 { "setpe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1184 { "setpo", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1185 { "sets", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1186 { "setz", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1187 { "sfence", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1188 { "sgdt", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1189 { "shl", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1190 { "shld", Op_UpdSrcShft }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1191 { "shr", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1192 { "shrd", Op_UpdSrcShft }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1193 { "shufpd", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1194 { "shufps", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1195 { "sidt", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1196 { "sldt", Op_DstRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1197 { "smsw", Op_DstRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1198 { "sqrtpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1199 { "sqrtps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1200 { "sqrtsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1201 { "sqrtss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1202 { "stc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1203 { "std", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1204 { "sti", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1205 { "stmxcsr",Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1206 { "stos", Op_stos }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1207 { "stosb", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1208 { "stosd", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1209 { "stosw", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1210 { "stosq", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1211 { "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
|
1212 { "sub", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1213 { "subpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1214 { "subps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1215 { "subq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1216 { "subsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1217 { "subss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1218 { "swapgs", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1219 { "sysenter",Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1220 { "sysexit", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1221 { "sysret", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1222 { "testl", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1223 { "ucomisd", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1224 { "ucomiss", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1225 { "ud2", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1226 { "unpckhpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1227 { "unpckhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1228 { "unpcklpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1229 { "unpcklps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1230 { "verr", Op_SrcMemNTF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1231 { "verw", Op_SrcMemNTF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1232 { "wbinvd", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1233 { "wrmsr", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1234 { "xadd", Op_UpdUpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1235 { "xchg", Op_UpdUpd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1236 { "xlat", Op_xlat }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1237 { "xlatb", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1238 { "xor", Op_DstSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1239 { "xorpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1240 { "xorps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1241 { "xorq", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1242 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1243 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1244 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1245 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1246 Default_Ptr = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1247 Byte_Ptr = 1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1248 Short_Ptr = 2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1249 Int_Ptr = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1250 QWord_Ptr = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1251 Float_Ptr = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1252 Double_Ptr = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1253 Extended_Ptr = 10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1254 Near_Ptr = 98, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1255 Far_Ptr = 99, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1256 N_PtrTypes |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1257 } PtrType; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1258 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1259 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
|
1260 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
|
1261 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1262 "word", "dword", "qword", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1263 "float", "double", "extended", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1264 "near", "far" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1265 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1266 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1267 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
|
1268 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
|
1269 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1270 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
|
1271 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
|
1272 Near_Ptr, Far_Ptr |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1273 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1274 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1275 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1276 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1277 Opr_Invalid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1278 Opr_Immediate, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1279 Opr_Reg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1280 Opr_Mem |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1281 } OperandClass; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1282 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1283 /* kill inlining if we reference a local? */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1284 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1285 /* 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
|
1286 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1287 /* 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
|
1288 if naked.. */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1289 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1290 // mov eax, 4 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1291 // 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
|
1292 // -- 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
|
1293 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1294 static Token eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1295 static Expression * Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1296 static Identifier * ident_seg; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1297 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1298 struct AsmProcessor |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1299 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1300 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1301 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1302 int inBracket; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1303 int hasBracket; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1304 int hasNumber; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1305 int isOffset; |
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 Reg segmentPrefix; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1308 Reg reg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1309 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
|
1310 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
|
1311 Reg baseReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1312 Reg indexReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1313 int scale; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1314 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1315 OperandClass cls; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1316 PtrType dataSize; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1317 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
|
1318 } Operand; |
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 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
|
1321 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1322 AsmStatement * stmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1323 Scope * sc; |
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 Token * token; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1326 OutBuffer * insnTemplate; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1327 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1328 AsmOp op; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1329 AsmOpInfo * opInfo; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1330 Operand operands[Max_Operands]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1331 Identifier * opIdent; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1332 Operand * operand; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1333 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1334 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
|
1335 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1336 this->sc = sc; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1337 this->stmt = stmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1338 token = stmt->tokens; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1339 insnTemplate = new OutBuffer; |
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 opInfo = NULL; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1342 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1343 if ( ! regInfo[0].ident ) |
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 char buf[8], *p; |
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 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
|
1348 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1349 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
|
1350 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
|
1351 *p = std::tolower ( *p ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1352 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
|
1353 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
|
1354 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
|
1355 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1356 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1357 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
|
1358 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
|
1359 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1360 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
|
1361 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1362 ident_seg = Lexer::idPool ( "seg" ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1363 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1364 eof_tok.value = TOKeof; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1365 eof_tok.next = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1366 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1367 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1368 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1369 void run() |
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 parse(); |
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 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1374 void nextToken() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1375 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1376 if ( token->next ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1377 token = token->next; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1378 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1379 token = & eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1380 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1381 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1382 Token * peekToken() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1383 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1384 if ( token->next ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1385 return token->next; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1386 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1387 return & eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1388 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1389 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1390 void expectEnd() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1391 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1392 if ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1393 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
|
1394 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1395 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1396 void parse() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1397 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1398 op = parseOpcode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1399 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1400 switch ( op ) |
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 case Op_Align: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1403 doAlign(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1404 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1405 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1406 case Op_Even: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1407 doEven(); |
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_Naked: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1411 doNaked(); |
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_Invalid: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1415 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1416 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1417 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
|
1418 doData(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1419 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1420 doInstruction(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1421 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1422 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1423 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1424 AsmOp parseOpcode() |
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 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
|
1427 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1428 switch ( token->value ) |
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 case TOKalign: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1431 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1432 return Op_Align; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1433 case TOKin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1434 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1435 opIdent = Id::___in; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1436 return Op_in; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1437 case TOKint32: // "int" |
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::__int; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1440 return Op_SrcImm; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1441 case TOKout: |
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::___out; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1444 return Op_out; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1445 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1446 // search for mnemonic below |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1447 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1448 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1449 stmt->error ( "expected opcode" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1450 return Op_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1451 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1452 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1453 opIdent = token->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1454 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
|
1455 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1456 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1457 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1458 // %% okay to use bsearch? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1459 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
|
1460 do |
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 k = ( i + j ) / 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1463 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
|
1464 if ( ! l ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1465 return opData[k].asmOp; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1466 else if ( l < 0 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1467 j = k; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1468 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1469 i = k + 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1470 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1471 while ( i != j ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1472 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1473 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
|
1474 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1475 return Op_Invalid; |
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 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1478 // 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
|
1479 void doInstruction() |
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 bool ok = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1482 unsigned operand_i = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1483 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1484 opInfo = & asmOpInfo[op]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1485 memset ( operands, 0, sizeof ( operands ) ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1486 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1487 while ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1488 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1489 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
|
1490 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1491 operand = & operands[operand_i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1492 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
|
1493 operand->segmentPrefix = Reg_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1494 parseOperand(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1495 operand_i++; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1496 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1497 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1498 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1499 ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1500 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
|
1501 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1502 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1503 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1504 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
|
1505 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1506 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
|
1507 } |
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
|
1508 else if ( token->value == TOKint16 || token->value == TOKint32 || token->value == TOKint64 ) |
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
|
1509 { |
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
|
1510 //throw away the 'short' in "jle short Label;". Works for long also. |
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
|
1511 operands[0] = operands[1]; |
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
|
1512 return; |
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
|
1513 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1514 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
|
1515 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1516 ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1517 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
|
1518 return; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1519 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1520 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1521 // 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
|
1522 // ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1523 // 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
|
1524 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1525 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1526 if ( matchOperands ( operand_i ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1527 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1528 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
|
1529 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1530 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
|
1531 stmt->asmcode = ( code * ) asmcode; |
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 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1534 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1535 void setAsmCode() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1536 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1537 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
|
1538 asmcode->insnTemplateLen = insnTemplate->offset; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1539 asmcode->insnTemplate = ( char* ) insnTemplate->extractData(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1540 stmt->asmcode = ( code* ) asmcode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1541 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1542 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1543 // 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
|
1544 bool matchOperands ( unsigned nOperands ) |
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 bool wrong_number = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1547 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1548 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
|
1549 classifyOperand ( & operands[i] ); |
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 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1552 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1553 if ( nOperands == opInfo->nOperands() ) |
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 wrong_number = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1556 /* 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
|
1557 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
|
1558 Op_FCmpP/Op_FCmpP1 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1559 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
|
1560 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1561 Operand * operand = & operands[i]; |
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 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
|
1564 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1565 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
|
1566 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
|
1567 goto no_match; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1568 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1569 case OprC_RFP: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1570 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
|
1571 goto no_match; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1572 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1573 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1574 break; |
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 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1577 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1578 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1579 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1580 no_match: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1581 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
|
1582 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
|
1583 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1584 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1585 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1586 if ( wrong_number ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1587 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
|
1588 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1589 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
|
1590 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1591 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1592 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1593 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
|
1594 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1595 if ( sc->func->naked ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1596 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1597 switch ( type ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1598 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1599 case Arg_Integer: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1600 if ( e->type->isunsigned() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1601 insnTemplate->printf ( "$%llu", e->toUInteger() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1602 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1603 insnTemplate->printf ( "$%lld", e->toInteger() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1604 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1605 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1606 case Arg_Pointer: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1607 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
|
1608 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1609 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1610 case Arg_Memory: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1611 if ( e->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1612 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1613 VarExp* v = ( VarExp* ) e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1614 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
|
1615 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1616 if ( !vd->isDataseg() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1617 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1618 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
|
1619 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1620 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1621 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1622 // osx needs an extra underscore |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1623 if ( global.params.os == OSMacOSX ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1624 insnTemplate->writestring ( "_" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1625 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1626 // print out the mangle |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1627 insnTemplate->writestring ( vd->mangle() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1628 vd->nakedUse = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1629 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1630 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1631 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1632 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
|
1633 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1634 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1635 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1636 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
|
1637 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1638 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1639 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1640 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1641 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1642 insnTemplate->writestring ( ( char* ) fmt ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1643 insnTemplate->printf ( "<<%s%d>>", ( mode==Mode_Input ) ?"in":"out", asmcode->args.dim ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1644 asmcode->args.push ( new AsmArg ( type, e, mode ) ); |
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 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1647 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
|
1648 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1649 assert ( !sc->func->naked ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1650 insnTemplate->writestring ( ( char* ) fmtpre ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1651 insnTemplate->printf ( "<<%s%d>>", ( mode==Mode_Input ) ?"in":"out", asmcode->args.dim ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1652 insnTemplate->writestring ( ( char* ) fmtpost ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1653 asmcode->args.push ( new AsmArg ( type, e, mode ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1654 } |
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 void addLabel ( char* id ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1657 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1658 insnTemplate->writestring ( sc->func->mangle() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1659 insnTemplate->writestring ( "_" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1660 insnTemplate->writestring ( id ); |
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 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1663 /* 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
|
1664 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
|
1665 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
|
1666 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
|
1667 void classifyOperand ( Operand * operand ) |
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 operand->cls = classifyOperand1 ( operand ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1670 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1671 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1672 OperandClass classifyOperand1 ( Operand * operand ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1673 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1674 bool is_localsize = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1675 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
|
1676 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1677 if ( operand->symbolDisplacement.dim ) |
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 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
|
1680 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
|
1681 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1682 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1683 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
|
1684 return Opr_Immediate; |
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 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
|
1687 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1688 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
|
1689 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1690 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1691 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1692 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1693 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1694 return Opr_Mem; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1695 } |
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 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
|
1698 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1699 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1700 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1701 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1702 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1703 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
|
1704 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1705 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
|
1706 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1707 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1708 return Opr_Invalid; |
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 return Opr_Mem; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1712 } |
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->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
|
1715 return Opr_Reg; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1716 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1717 // 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
|
1718 // |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1719 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
|
1720 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1721 // 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
|
1722 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
|
1723 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1724 if ( operand->constDisplacement < 0x100 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1725 operand->dataSize = Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1726 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
|
1727 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
|
1728 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
|
1729 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
|
1730 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
|
1731 //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
|
1732 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
|
1733 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1734 return Opr_Immediate; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1735 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1736 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1737 // probably a bug,? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1738 stmt->error ( "invalid operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1739 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1740 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1741 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1742 void writeReg ( Reg reg ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1743 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1744 insnTemplate->writestring ( ( char* ) "%" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1745 insnTemplate->write ( regInfo[reg].gccName.c_str(), regInfo[reg].gccName.length() ); |
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 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1748 bool opTakesLabel() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1749 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1750 switch ( op ) |
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 case Op_Branch: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1753 case Op_CBranch: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1754 case Op_Loop: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1755 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1756 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1757 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1758 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1759 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1760 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1761 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
|
1762 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1763 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
|
1764 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1765 case Byte_NoType: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1766 return ptrtype == Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1767 case Word_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1768 if ( ptrtype == Byte_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1769 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1770 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1771 case Int_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1772 switch ( ptrtype ) |
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 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
|
1775 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
|
1776 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
|
1777 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
|
1778 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1779 // %% 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
|
1780 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1781 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1782 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1783 case FPInt_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1784 switch ( ptrtype ) |
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 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
|
1787 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
|
1788 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
|
1789 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1790 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1791 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1792 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1793 case FP_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1794 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1795 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1796 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
|
1797 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
|
1798 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
|
1799 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1800 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1801 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1802 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1803 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1804 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1805 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1806 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1807 } |
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
|
1808 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1809 // also set impl clobbers |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1810 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
|
1811 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1812 const char *fmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1813 const char *mnemonic; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1814 char type_char = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1815 bool use_star; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1816 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
|
1817 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1818 insnTemplate = new OutBuffer; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1819 // %% 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
|
1820 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
|
1821 mnemonic = alternateMnemonics[opInfo->link]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1822 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1823 mnemonic = opIdent->string; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1824 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1825 if ( opInfo->needsType ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1826 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1827 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
|
1828 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
|
1829 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
|
1830 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1831 /* 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
|
1832 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
|
1833 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1834 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
|
1835 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
|
1836 case FPInt_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1837 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
|
1838 min_type = Int_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1839 else // compare, load, store |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1840 min_type = Short_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1841 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1842 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
|
1843 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1844 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
|
1845 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
|
1846 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1847 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
|
1848 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1849 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
|
1850 ! ( 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
|
1851 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
|
1852 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1853 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
|
1854 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
|
1855 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1856 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
|
1857 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1858 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
|
1859 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
|
1860 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1861 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1862 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1863 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
|
1864 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
|
1865 } |
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
|
1866 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1867 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1868 bool type_ok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1869 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
|
1870 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1871 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
|
1872 if ( ! type_ok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1873 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
|
1874 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1875 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1876 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
|
1877 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1878 if ( ! type_ok ) |
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 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
|
1881 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1882 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1883 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1884 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
|
1885 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1886 if ( operands[0].dataSize == Far_Ptr ) // %% type=Far_Ptr not set by Seg:Ofss OTOH, we don't support that.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1887 insnTemplate->writebyte ( 'l' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1888 } |
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
|
1889 else if ( op == Op_fxch || op == Op_FfdRR_P || Op_FidR_P) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1890 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1891 // gas won't accept the two-operand form |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1892 if ( operands[1].cls == Opr_Reg && operands[1].reg == Reg_ST ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1893 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1894 nOperands = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1895 } |
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
|
1896 else if ( operands[1].cls == Opr_Mem && operands[1].reg == Reg_ST ) |
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
|
1897 { |
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
|
1898 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
|
1899 } |
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
|
1900 else if ( operands[0].cls == Opr_Reg && (operands[0].reg == Reg_ST1 || operands[0].reg == Reg_ST || operands[0].reg == Reg_ST0 )) |
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
|
1901 { |
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
|
1902 //fix previous update to to allow single operand form of fstp |
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
|
1903 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1904 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1905 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1906 stmt->error ( "invalid operands" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1907 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1908 } |
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 switch ( op ) |
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 case Op_SizedStack: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1914 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1915 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1916 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
|
1917 insnTemplate->write ( mnemonic, mlen-1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1918 else |
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 insnTemplate->writestring ( ( char* ) mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1921 insnTemplate->writebyte ( 'w' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1922 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1923 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1924 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1925 case Op_cmpsd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1926 case Op_insX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1927 case Op_lodsX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1928 case Op_movsd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1929 case Op_outsX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1930 case Op_scasX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1931 case Op_stosX: |
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 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1934 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
|
1935 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1936 insnTemplate->write ( mnemonic, mlen-1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1937 insnTemplate->writebyte ( 'l' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1938 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1939 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1940 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1941 insnTemplate->writestring ( ( char* ) mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1942 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1943 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1944 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1945 case Op_movsx: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1946 case Op_movzx: |
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 char tc_1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1949 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1950 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
|
1951 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
|
1952 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
|
1953 // 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
|
1954 switch ( op1_size ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1955 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1956 case Byte_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1957 case Default_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1958 tc_1 = 'b'; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1959 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1960 case Short_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1961 tc_1 = 'w'; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1962 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1963 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1964 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
|
1965 return false; |
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 assert ( type_char != 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1968 insnTemplate->write ( mnemonic, mlen-1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1969 insnTemplate->writebyte ( tc_1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1970 insnTemplate->writebyte ( type_char ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1971 } |
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
|
1972 break; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1973 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1974 insnTemplate->writestring ( ( char* ) mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1975 if ( type_char ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1976 insnTemplate->writebyte ( type_char ); |
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 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1979 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1980 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
|
1981 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1982 case Clb_SizeAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1983 case Clb_EAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1984 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
|
1985 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1986 case Clb_SizeDXAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1987 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
|
1988 if ( type_char != 'b' ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1989 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
|
1990 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1991 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1992 // nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1993 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1994 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1995 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1996 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
|
1997 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
|
1998 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
|
1999 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
|
2000 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
|
2001 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
|
2002 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
|
2003 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
|
2004 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
|
2005 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2006 /* 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
|
2007 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
|
2008 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
|
2009 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
|
2010 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
|
2011 asmcode->regs[Reg_ST] = true; |
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
|
2012 asmcode->regs[Reg_ST0] = true; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2013 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
|
2014 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
|
2015 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
|
2016 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
|
2017 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
|
2018 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
|
2019 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
|
2020 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2021 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
|
2022 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
|
2023 if ( op == Op_cpuid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2024 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2025 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
|
2026 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
|
2027 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
|
2028 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2029 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2030 insnTemplate->writebyte ( ' ' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2031 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
|
2032 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2033 int i; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2034 if ( i__ != 0 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2035 insnTemplate->writestring ( ( char* ) ", " ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2036 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2037 fmt = "$"; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2038 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2039 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2040 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2041 case Op_mul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2042 // 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
|
2043 i__ = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2044 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2045 case Op_bound: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2046 case Op_enter: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2047 i = i__; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2048 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2049 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2050 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
|
2051 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2052 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2053 operand = & operands[ i ]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2054 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2055 switch ( operand->cls ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2056 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2057 case Opr_Immediate: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2058 // for implementing offset: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2059 // $var + $7 // fails |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2060 // $var + 7 // ok |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2061 // $7 + $var // ok |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2062 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2063 // 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
|
2064 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2065 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
|
2066 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
|
2067 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2068 if ( opTakesLabel() /*opInfo->takesLabel()*/ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2069 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2070 // "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
|
2071 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
|
2072 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2073 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2074 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2075 if ( operand->symbolDisplacement.dim && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2076 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
|
2077 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2078 // 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
|
2079 // 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
|
2080 addOperand ( "$", Arg_LocalSize, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2081 ( 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
|
2082 if ( operand->constDisplacement ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2083 insnTemplate->writebyte ( '+' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2084 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2085 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2086 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2087 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2088 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2089 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2090 fmt = "$a"; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2091 addOperand ( "$", Arg_Pointer, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2092 ( 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
|
2093 asmcode ); |
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 if ( operand->constDisplacement ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2096 insnTemplate->writebyte ( '+' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2097 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2098 // 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
|
2099 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2100 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2101 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
|
2102 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2103 case Opr_Reg: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2104 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
|
2105 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2106 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
|
2107 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
|
2108 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2109 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
|
2110 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2111 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2112 if ( opTakesLabel() /*opInfo->takesLabel()*/ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2113 insnTemplate->writebyte ( '*' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2114 writeReg ( operand->reg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2115 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2116 insnTemplate->writestring("%"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2117 insnTemplate->writestring(regInfo[operand->reg].name); |
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 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2120 case Opr_Mem: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2121 // 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
|
2122 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
|
2123 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2124 mode = Mode_Update; |
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 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
|
2127 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2128 mode = Mode_Output; |
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 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2131 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2132 mode = Mode_Input; |
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 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2135 use_star = opTakesLabel();//opInfo->takesLabel(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2136 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
|
2137 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2138 writeReg ( operand->segmentPrefix ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2139 insnTemplate->writebyte ( ':' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2140 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2141 if ( operand->symbolDisplacement.dim ) |
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 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
|
2144 Declaration * decl = 0; |
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 if ( e->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2147 decl = ( ( VarExp * ) e )->var; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2148 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2149 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
|
2150 decl && ! decl->isDataseg() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2151 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2152 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2153 // 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
|
2154 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2155 /* 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
|
2156 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
|
2157 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2158 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
|
2159 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
|
2160 the stack offset. |
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 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2163 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
|
2164 decl->isVarDeclaration() && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2165 ( ( ( 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
|
2166 ( ( 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
|
2167 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2168 |
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
|
2169 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
|
2170 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
|
2171 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2172 #if !IN_LLVM |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2173 /* 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
|
2174 if ( sc->func->naked ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2175 operand->constDisplacement += 4; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2176 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2177 if ( operand->constDisplacement ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2178 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2179 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
|
2180 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
|
2181 Type::tint64 ) ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2182 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
|
2183 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2184 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
|
2185 e->type = decl->type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2186 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2187 operand->constDisplacement = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2188 operand->baseReg = Reg_Invalid; |
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 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
|
2191 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2192 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2193 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2194 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2195 // FIXME: what is this ? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2196 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
|
2197 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2198 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
|
2199 asmcode->clobbersMemory = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2200 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2201 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2202 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2203 // 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
|
2204 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2205 /* 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
|
2206 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
|
2207 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2208 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
|
2209 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
|
2210 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2211 if ( isDollar ( e ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2212 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2213 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
|
2214 asmcode->dollarLabel = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2215 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2216 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
|
2217 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2218 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
|
2219 stmt->isBranchToLabel = lbl->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2220 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2221 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2222 addLabel ( lbl->ident->toChars() ); |
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 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
|
2225 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2226 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2227 // simply write out the mangle |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2228 // on osx, prepend extra _ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2229 if ( global.params.os == OSMacOSX ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2230 insnTemplate->writestring ( "_" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2231 insnTemplate->writestring ( decl->mangle() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2232 // 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
|
2233 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2234 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2235 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2236 if ( use_star ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2237 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2238 insnTemplate->writebyte ( '*' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2239 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2240 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2241 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2242 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
|
2243 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2244 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
|
2245 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
|
2246 e->type = tt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2247 } |
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 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
|
2250 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2251 } |
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 ( use_star ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2254 insnTemplate->writebyte ( '*' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2255 if ( operand->segmentPrefix != Reg_Invalid || operand->constDisplacement ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2256 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2257 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2258 insnTemplate->writebyte ( '+' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2259 //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
|
2260 insnTemplate->printf ( "%d", operand->constDisplacement ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2261 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
|
2262 asmcode->clobbersMemory = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2263 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2264 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
|
2265 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2266 insnTemplate->writebyte ( '(' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2267 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
|
2268 writeReg ( operand->baseReg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2269 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
|
2270 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2271 insnTemplate->writebyte ( ',' ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2272 writeReg ( operand->indexReg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2273 if ( operand->scale ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2274 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2275 insnTemplate->printf ( ",%d", operand->scale ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2276 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2277 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2278 insnTemplate->writebyte ( ')' ); |
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 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2283 case Opr_Invalid: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2284 return false; |
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 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2287 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2288 asmcode->insnTemplateLen = insnTemplate->offset; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2289 asmcode->insnTemplate = ( char* ) insnTemplate->extractData(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2290 return true; |
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 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2293 bool isIntExp ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2294 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2295 if ( exp->op == TOKint64 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2296 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2297 if ( exp->op == TOKvar ) |
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 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
|
2300 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
|
2301 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2302 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2303 return 0; |
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 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
|
2306 bool isLocalSize ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2307 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2308 // 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
|
2309 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
|
2310 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2311 bool isDollar ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2312 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2313 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
|
2314 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2315 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2316 Expression * newRegExp ( int regno ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2317 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2318 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
|
2319 e->op = TOKmod; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2320 return e; |
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 |
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
|
2323 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
|
2324 { |
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
|
2325 // 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
|
2326 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
|
2327 } |
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 void slotExp ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2330 { |
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 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
|
2333 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2334 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
|
2335 if reg: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2336 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
|
2337 if in bracket: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2338 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
|
2339 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
|
2340 else, error |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2341 if symbol: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2342 set symbol field |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2343 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2344 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2345 bool is_offset = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2346 if ( exp->op == TOKaddress ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2347 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2348 exp = ( ( AddrExp * ) exp )->e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2349 is_offset = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2350 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2351 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2352 if ( isIntExp ( exp ) ) |
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 if ( is_offset ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2355 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2356 operand->constDisplacement += exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2357 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2358 operand->hasNumber = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2359 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2360 else if ( isRegExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2361 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2362 if ( is_offset ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2363 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2364 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2365 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2366 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
|
2367 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
|
2368 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2369 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
|
2370 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2371 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2372 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2373 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
|
2374 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
|
2375 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
|
2376 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2377 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
|
2378 operand->scale = 1; |
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 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2381 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2382 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
|
2383 } |
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 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2386 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
|
2387 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2388 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
|
2389 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2390 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
|
2391 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2392 operand->constDisplacement += v->offset; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2393 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2394 operand->hasNumber = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2395 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2396 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2397 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2398 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
|
2399 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2400 // 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
|
2401 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
|
2402 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
|
2403 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
|
2404 } |
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 ( ! operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2407 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2408 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
|
2409 operand->isOffset = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2410 operand->symbolDisplacement.push ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2411 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2412 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2413 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2414 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
|
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 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2418 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
|
2419 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2420 // %% 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
|
2421 // change to addSymbolDisp(e) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2422 if ( ! operand->symbolDisplacement.dim ) |
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 operand->symbolDisplacement.push ( 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 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2427 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2428 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
|
2429 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2430 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2431 else if ( exp == Handled ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2432 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2433 // nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2434 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2435 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2436 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2437 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
|
2438 } |
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
|
2439 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2440 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2441 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
|
2442 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2443 // %% report operand number |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2444 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
|
2445 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2446 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2447 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
|
2448 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2449 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2450 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
|
2451 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2452 switch ( op ) |
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 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2455 if ( e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2456 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
|
2457 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2458 e = e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2459 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2460 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2461 if ( e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2462 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
|
2463 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2464 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
|
2465 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2466 case TOKmul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2467 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
|
2468 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2469 case TOKdiv: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2470 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
|
2471 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2472 case TOKmod: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2473 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
|
2474 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2475 case TOKshl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2476 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
|
2477 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2478 case TOKshr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2479 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
|
2480 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2481 case TOKushr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2482 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
|
2483 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2484 case TOKnot: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2485 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
|
2486 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2487 case TOKtilde: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2488 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
|
2489 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2490 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2491 assert ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2492 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2493 e = e->semantic ( sc ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2494 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
|
2495 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2496 else |
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 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
|
2499 return newIntExp ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2500 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2501 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2502 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2503 void parseOperand() |
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 Expression * exp = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2506 slotExp ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2507 if ( isRegExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2508 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
|
2509 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2510 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2511 Expression * parseAsmExp() |
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 return parseShiftExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2514 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2515 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2516 Expression * parseShiftExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2517 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2518 Expression * e1 = parseAddExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2519 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2520 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2521 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2522 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2523 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2524 switch ( tv ) |
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 TOKshl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2527 case TOKshr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2528 case TOKushr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2529 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2530 e2 = parseAddExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2531 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
|
2532 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2533 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2534 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2535 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2536 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2537 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2538 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2539 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2540 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2541 Expression * parseAddExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2542 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2543 Expression * e1 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2544 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2545 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2546 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2547 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2548 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2549 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2550 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2551 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2552 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2553 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2554 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
|
2555 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
|
2556 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2557 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2558 slotExp ( e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2559 slotExp ( e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2560 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2561 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2562 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2563 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2564 // 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
|
2565 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2566 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2567 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
|
2568 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
|
2569 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2570 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2571 slotExp ( e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2572 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
|
2573 slotExp ( e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2574 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2575 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2576 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2577 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2578 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2579 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2580 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2581 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2582 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2583 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2584 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2585 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
|
2586 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2587 Expression * et; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2588 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
|
2589 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2590 et = e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2591 e1 = e2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2592 e2 = et; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2593 goto do_scale; |
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 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
|
2596 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2597 do_scale: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2598 if ( ! operand->inBracket ) |
221
68687d8c3e9a
[svn r237] some inline asm output now seems to work, see tangotests/asm2.d
lindquist
parents:
220
diff
changeset
|
2599 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2600 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
|
2601 } |
222
251548c1035d
[svn r238] use *m for memory input constraints and pass in their address
ChristianK
parents:
221
diff
changeset
|
2602 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2603 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
|
2604 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2605 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2606 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2607 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2608 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2609 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
|
2610 operand->scale = e2->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2611 switch ( operand->scale ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2612 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2613 case 1: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2614 case 2: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2615 case 4: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2616 case 8: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2617 // ok; do nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2618 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2619 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2620 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
|
2621 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2622 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2623 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2624 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2625 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2626 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2627 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2628 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2629 Expression * parseMultExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2630 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2631 Expression * e1 = parseBrExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2632 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2633 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2634 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2635 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2636 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2637 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2638 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2639 case TOKmul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2640 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2641 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2642 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
|
2643 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
|
2644 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
|
2645 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2646 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2647 invalidExpression(); |
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 case TOKdiv: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2650 case TOKmod: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2651 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2652 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2653 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
|
2654 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2655 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2656 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2657 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2658 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2659 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2660 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2661 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2662 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2663 Expression * parseBrExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2664 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2665 // %% 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
|
2666 // 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
|
2667 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2668 // 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
|
2669 // the spec'd syntax |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2670 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2671 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2672 if ( token->value == TOKlbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2673 e = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2674 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2675 e = parseUnaExp(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2676 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2677 // 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
|
2678 while ( token->value == TOKlbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2679 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2680 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2681 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2682 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
|
2683 slotExp ( parseAsmExp() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2684 operand->inBracket = 0; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2685 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2686 if ( token->value == TOKrbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2687 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2688 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2689 stmt->error ( "missing ']'" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2690 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2691 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2692 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2693 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2694 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2695 PtrType isPtrType ( Token * tok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2696 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2697 switch ( tok->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2698 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2699 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
|
2700 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
|
2701 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
|
2702 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
|
2703 // '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
|
2704 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
|
2705 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
|
2706 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
|
2707 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2708 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
|
2709 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
|
2710 return ptrTypeValueTable[i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2711 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2712 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2713 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2714 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2715 return Default_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2716 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2717 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2718 Expression * parseUnaExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2719 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2720 Expression * e = NULL; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2721 PtrType ptr_type; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2722 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2723 // 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
|
2724 if ( token->value != TOKeof && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2725 peekToken()->value == TOKidentifier && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2726 peekToken()->ident == Id::ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2727 { |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2728 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2729 ptr_type = isPtrType ( token ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2730 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
|
2731 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2732 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
|
2733 operand->dataSize = ptr_type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2734 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2735 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
|
2736 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2737 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2738 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
|
2739 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2740 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2741 return parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2742 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2743 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2744 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2745 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2746 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2747 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2748 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
|
2749 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2750 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2751 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
|
2752 e = parseAsmExp(); |
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 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
|
2755 token->ident == Id::offsetof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2756 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2757 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
|
2758 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
|
2759 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2760 e = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2761 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
|
2762 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2763 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2764 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2765 // primary exp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2766 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2767 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2768 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2769 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2770 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2771 case TOKnot: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2772 case TOKtilde: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2773 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2774 e = parseUnaExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2775 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
|
2776 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2777 // primary exp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2778 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2779 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2780 return parsePrimaryExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2781 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2782 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2783 Expression * parsePrimaryExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2784 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2785 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2786 Identifier * ident = NULL; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2787 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2788 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2789 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2790 case TOKint32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2791 case TOKuns32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2792 case TOKint64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2793 case TOKuns64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2794 // semantic here? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2795 // %% 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
|
2796 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
|
2797 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2798 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2799 case TOKfloat32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2800 case TOKfloat64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2801 case TOKfloat80v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2802 // %% need different types? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2803 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
|
2804 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2805 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2806 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2807 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2808 ident = token->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2809 nextToken(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2810 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2811 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
|
2812 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2813 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
|
2814 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2815 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
|
2816 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2817 do_dollar: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2818 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
|
2819 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2820 else |
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 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
|
2823 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2824 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2825 // 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
|
2826 // 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
|
2827 // 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
|
2828 // 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
|
2829 // 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
|
2830 // %% 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
|
2831 while ( token->value == TOKdot ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2832 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2833 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2834 if ( token->value == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2835 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2836 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
|
2837 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2838 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2839 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2840 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2841 stmt->error ( "expected identifier" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2842 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2843 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2844 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2845 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2846 // 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
|
2847 if ( e->op == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2848 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2849 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
|
2850 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2851 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
|
2852 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2853 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
|
2854 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2855 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2856 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2857 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2858 case TOKint32v: case TOKuns32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2859 case TOKint64v: case TOKuns64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2860 if ( token->uns64value < 8 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2861 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
|
2862 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2863 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2864 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
|
2865 e = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2866 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2867 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2868 if ( token->value == TOKrparen ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2869 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2870 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2871 stmt->error ( "expected ')'" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2872 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2873 default: |
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 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2876 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2877 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2878 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2879 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
|
2880 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2881 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2882 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
|
2883 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
|
2884 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
|
2885 operand->segmentPrefix = ( Reg ) i; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2886 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2887 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
|
2888 return parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2889 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2890 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2891 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2892 return newRegExp ( ( Reg ) i ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2893 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2894 } |
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 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2897 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2898 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
|
2899 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2900 // 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
|
2901 // 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
|
2902 Dsymbol *scopesym; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2903 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2904 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
|
2905 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
|
2906 sc->func->searchLabel ( ident ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2907 } |
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 e = e->semantic ( sc ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2910 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2911 // 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
|
2912 if ( e->op == TOKfloat64 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2913 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2914 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
|
2915 if ( sym ) |
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 VarDeclaration *v = sym->isVarDeclaration(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2918 if ( v ) |
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 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
|
2921 ve->type = e->type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2922 e = ve; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2923 } |
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 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2926 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2927 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2928 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2929 case TOKdollar: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2930 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2931 ident = Id::__dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2932 goto do_dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2933 break; |
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
|
2934 case TOKint16: |
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
|
2935 case TOKint32: |
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
|
2936 case TOKint64: |
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
|
2937 //This is for the 'short' in "jle short Label;" |
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
|
2938 return Handled; |
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
|
2939 break; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2940 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2941 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2942 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2943 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2944 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2945 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2946 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2947 void doAlign() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2948 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2949 // .align bits vs. bytes... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2950 // 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
|
2951 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2952 // 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
|
2953 // 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
|
2954 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
|
2955 uinteger_t align = e->toUInteger(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2956 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2957 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
|
2958 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2959 //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
|
2960 // 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
|
2961 #ifdef HAVE_GAS_BALIGN_AND_P2ALIGN |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2962 insnTemplate->printf ( ".balign\t%u", ( unsigned ) align ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2963 #else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2964 insnTemplate->printf ( ".align\t%u", ( unsigned ) align ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2965 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2966 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2967 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2968 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2969 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
|
2970 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2971 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2972 setAsmCode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2973 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2974 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2975 void doEven() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2976 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2977 // .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
|
2978 #ifdef HAVE_GAS_BALIGN_AND_P2ALIGN |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2979 insnTemplate->writestring ( ( char * ) ".align\t2" ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2980 #else |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2981 insnTemplate->writestring ( ( char * ) ".align\t2" ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2982 #endif |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2983 setAsmCode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2984 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2985 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2986 void doNaked() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2987 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2988 // %% 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
|
2989 sc->func->naked = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2990 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2991 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2992 void doData() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2993 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2994 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
|
2995 "", "", "" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2996 }; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2997 // FIXME |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2998 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2999 machine_mode mode; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3000 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3001 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
|
3002 insnTemplate->writebyte(' '); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3003 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3004 do { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3005 // 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
|
3006 switch (op) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3007 case Op_db: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3008 case Op_ds: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3009 case Op_di: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3010 case Op_dl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3011 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
|
3012 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
|
3013 // 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
|
3014 if (op != Op_dl) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3015 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
|
3016 else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3017 // 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
|
3018 // 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
|
3019 insnTemplate->printf("%u,%u", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3020 (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
|
3021 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3022 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3023 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
|
3024 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3025 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3026 case Op_df: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3027 mode = SFmode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3028 goto do_float; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3029 case Op_dd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3030 mode = DFmode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3031 goto do_float; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3032 case Op_de: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3033 #ifndef TARGET_80387 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3034 #define XFmode TFmode |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3035 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3036 mode = XFmode; // not TFmode |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3037 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3038 do_float: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3039 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
|
3040 token->value == TOKfloat80v) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3041 long words[3]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3042 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
|
3043 // 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
|
3044 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
|
3045 if (mode != SFmode) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3046 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
|
3047 // 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
|
3048 if (mode == XFmode) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3049 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
|
3050 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3051 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
|
3052 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3053 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3054 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3055 abort(); |
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 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3059 if (token->value == TOKcomma) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3060 insnTemplate->writebyte(','); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3061 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3062 } 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
|
3063 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3064 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3065 stmt->error("expected comma"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3066 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3067 } while (1); |
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 setAsmCode();*/ |
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 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3072 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3073 #if D_GCC_VER < 40 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3074 // 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
|
3075 // be modified accordingly. |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3076 #undef XEXP |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3077 #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
|
3078 #endif |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3079 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3080 // FIXME |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3081 #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
|
3082 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
|
3083 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3084 assert ( 0 ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3085 // FIXME |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3086 // // 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
|
3087 // // 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
|
3088 // // 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
|
3089 // rtx r = DECL_INCOMING_RTL(decl); |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3090 // rtx e1, e2; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3091 // |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3092 // // Local variables don't have DECL_INCOMING_RTL |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3093 // 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
|
3094 // r = DECL_RTL(decl); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3095 // |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3096 // 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
|
3097 // r = XEXP(r, 0); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3098 // 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
|
3099 // e1 = XEXP(r, 0); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3100 // e2 = XEXP(r, 1); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3101 // 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
|
3102 // *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
|
3103 // return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3104 // } 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
|
3105 // *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
|
3106 // return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3107 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3108 // } 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
|
3109 // *result = 8; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3110 // 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
|
3111 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3112 // // 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
|
3113 // } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3114 // |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3115 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3116 } |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3117 |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3118 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3119 struct AsmParser : public AsmParserCommon |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3120 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3121 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
|
3122 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3123 AsmProcessor ap ( sc, asmst ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3124 ap.run(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3125 } |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3126 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3127 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
|
3128 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3129 return regInfo[i].gccName; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3130 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3131 }; |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3132 |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3133 } |