Mercurial > projects > ldc
annotate gen/asm-x86-64.h @ 1138:4c8bb03e4fbc
Update DtoConstFP() to be correct after LLVM r67562, which changed the way the
APFloat constructor expects its i80 APInts to be formatted. (They're now
actually consistent with the x87 format)
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Tue, 24 Mar 2009 15:24:59 +0100 |
parents | 97d80437cb80 |
children | ea7b8b6c96c0 |
rev | line source |
---|---|
304 | 1 // Taken from GDC source tree. Original by David Friedman. |
2 // Released under the Artistic License found in dmd/artistic.txt | |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3 |
751
dc8b8b7ea0c1
Fix compile-time warnings. Adjust include in d-asm-i386.
Christian Kamm <kamm incasoftware de>
parents:
468
diff
changeset
|
4 #include "id.h" |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
5 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
6 namespace AsmParserx8664 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
7 { |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
8 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
9 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
10 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
11 Reg_Invalid = -1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
12 Reg_EAX = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
13 Reg_EBX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
14 Reg_ECX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
15 Reg_EDX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
16 Reg_ESI, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
17 Reg_EDI, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
18 Reg_EBP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
19 Reg_ESP, |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
20 Reg_ST, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
21 Reg_ST1, Reg_ST2, Reg_ST3, Reg_ST4, Reg_ST5, Reg_ST6, Reg_ST7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
22 Reg_MM0, Reg_MM1, Reg_MM2, Reg_MM3, Reg_MM4, Reg_MM5, Reg_MM6, Reg_MM7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
23 Reg_XMM0, Reg_XMM1, Reg_XMM2, Reg_XMM3, Reg_XMM4, Reg_XMM5, Reg_XMM6, Reg_XMM7, |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
24 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
25 Reg_RAX, Reg_RBX, Reg_RCX, Reg_RDX, Reg_RSI, Reg_RDI, Reg_RBP, Reg_RSP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
26 Reg_R8, Reg_R9, Reg_R10, Reg_R11, Reg_R12, Reg_R13, Reg_R14, Reg_R15, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
27 Reg_R8B, Reg_R9B, Reg_R10B, Reg_R11B, Reg_R12B, Reg_R13B, Reg_R14B, Reg_R15B, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
28 Reg_R8W, Reg_R9W, Reg_R10W, Reg_R11W, Reg_R12W, Reg_R13W, Reg_R14W, Reg_R15W, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
29 Reg_R8D, Reg_R9D, Reg_R10D, Reg_R11D, Reg_R12D, Reg_R13D, Reg_R14D, Reg_R15D, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
30 Reg_XMM8, Reg_XMM9, Reg_XMM10, Reg_XMM11, Reg_XMM12, Reg_XMM13, Reg_XMM14, Reg_XMM15, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
31 Reg_RIP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
32 Reg_SIL, Reg_DIL, Reg_BPL, Reg_SPL, |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
33 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
34 Reg_EFLAGS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
35 Reg_CS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
36 Reg_DS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
37 Reg_SS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
38 Reg_ES, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
39 Reg_FS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
40 Reg_GS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
41 Reg_AX, Reg_BX, Reg_CX, Reg_DX, Reg_SI, Reg_DI, Reg_BP, Reg_SP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
42 Reg_AL, Reg_AH, Reg_BL, Reg_BH, Reg_CL, Reg_CH, Reg_DL, Reg_DH, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
43 Reg_CR0, Reg_CR2, Reg_CR3, Reg_CR4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
44 Reg_DR0, Reg_DR1, Reg_DR2, Reg_DR3, Reg_DR6, Reg_DR7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
45 Reg_TR3, Reg_TR4, Reg_TR5, Reg_TR6, Reg_TR7 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
46 } Reg; |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
47 |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
48 static const int N_Regs = /*gp*/ 8 + /*fp*/ 8 + /*mmx*/ 8 + /*sse*/ 8 + |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
49 /*seg*/ 6 + /*16bit*/ 8 + /*8bit*/ 8 + /*sys*/ 4+6+5 + /*flags*/ + 1 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
50 + 8 /*RAX, etc*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
51 + 8 /*R8-15*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
52 + 4 /*SIL, etc. 8-bit*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
53 + 8 /*R8-15B*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
54 + 8 /*R8-15W*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
55 + 8 /*R8-15D*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
56 + 8 /*XMM8-15*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
57 + 1 /*RIP*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
58 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
59 ; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
60 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
61 #define NULL_TREE "" |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
62 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
63 static struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
64 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
65 const char * name; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
66 std::string gccName; // GAS will take upper case, but GCC won't (needed for the clobber list) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
67 Identifier * ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
68 char size; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
69 char baseReg; // %% todo: Reg, Reg_XX |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
70 } regInfo[N_Regs] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
71 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
72 { "EAX", NULL_TREE, NULL, 4, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
73 { "EBX", NULL_TREE, NULL, 4, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
74 { "ECX", NULL_TREE, NULL, 4, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
75 { "EDX", NULL_TREE, NULL, 4, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
76 { "ESI", NULL_TREE, NULL, 4, Reg_ESI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
77 { "EDI", NULL_TREE, NULL, 4, Reg_EDI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
78 { "EBP", NULL_TREE, NULL, 4, Reg_EBP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
79 { "ESP", NULL_TREE, NULL, 4, Reg_ESP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
80 { "ST", NULL_TREE, NULL, 10, Reg_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
81 { "ST(1)", NULL_TREE, NULL,10, Reg_ST1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
82 { "ST(2)", NULL_TREE, NULL,10, Reg_ST2 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
83 { "ST(3)", NULL_TREE, NULL,10, Reg_ST3 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
84 { "ST(4)", NULL_TREE, NULL,10, Reg_ST4 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
85 { "ST(5)", NULL_TREE, NULL,10, Reg_ST5 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
86 { "ST(6)", NULL_TREE, NULL,10, Reg_ST6 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
87 { "ST(7)", NULL_TREE, NULL,10, Reg_ST7 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
88 { "MM0", NULL_TREE, NULL, 8, Reg_MM0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
89 { "MM1", NULL_TREE, NULL, 8, Reg_MM1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
90 { "MM2", NULL_TREE, NULL, 8, Reg_MM2 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
91 { "MM3", NULL_TREE, NULL, 8, Reg_MM3 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
92 { "MM4", NULL_TREE, NULL, 8, Reg_MM4 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
93 { "MM5", NULL_TREE, NULL, 8, Reg_MM5 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
94 { "MM6", NULL_TREE, NULL, 8, Reg_MM6 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
95 { "MM7", NULL_TREE, NULL, 8, Reg_MM7 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
96 { "XMM0", NULL_TREE, NULL, 16, Reg_XMM0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
97 { "XMM1", NULL_TREE, NULL, 16, Reg_XMM1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
98 { "XMM2", NULL_TREE, NULL, 16, Reg_XMM2 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
99 { "XMM3", NULL_TREE, NULL, 16, Reg_XMM3 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
100 { "XMM4", NULL_TREE, NULL, 16, Reg_XMM4 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
101 { "XMM5", NULL_TREE, NULL, 16, Reg_XMM5 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
102 { "XMM6", NULL_TREE, NULL, 16, Reg_XMM6 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
103 { "XMM7", NULL_TREE, NULL, 16, Reg_XMM7 }, |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
104 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
105 { "RAX", NULL_TREE, NULL, 8, Reg_RAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
106 { "RBX", NULL_TREE, NULL, 8, Reg_RBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
107 { "RCX", NULL_TREE, NULL, 8, Reg_RCX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
108 { "RDX", NULL_TREE, NULL, 8, Reg_RDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
109 { "RSI", NULL_TREE, NULL, 8, Reg_RSI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
110 { "RDI", NULL_TREE, NULL, 8, Reg_RDI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
111 { "RBP", NULL_TREE, NULL, 8, Reg_RBP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
112 { "RSP", NULL_TREE, NULL, 8, Reg_RSP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
113 { "R8", NULL_TREE, NULL, 8, Reg_R8 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
114 { "R9", NULL_TREE, NULL, 8, Reg_R9 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
115 { "R10", NULL_TREE, NULL, 8, Reg_R10 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
116 { "R11", NULL_TREE, NULL, 8, Reg_R11 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
117 { "R12", NULL_TREE, NULL, 8, Reg_R12 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
118 { "R13", NULL_TREE, NULL, 8, Reg_R13 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
119 { "R14", NULL_TREE, NULL, 8, Reg_R14 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
120 { "R15", NULL_TREE, NULL, 8, Reg_R15 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
121 { "R8B", NULL_TREE, NULL, 1, Reg_R8 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
122 { "R9B", NULL_TREE, NULL, 1, Reg_R9 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
123 { "R10B", NULL_TREE, NULL, 1, Reg_R10 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
124 { "R11B", NULL_TREE, NULL, 1, Reg_R11 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
125 { "R12B", NULL_TREE, NULL, 1, Reg_R12 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
126 { "R13B", NULL_TREE, NULL, 1, Reg_R13 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
127 { "R14B", NULL_TREE, NULL, 1, Reg_R14 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
128 { "R15B", NULL_TREE, NULL, 1, Reg_R15 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
129 { "R8W", NULL_TREE, NULL, 2, Reg_R8 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
130 { "R9W", NULL_TREE, NULL, 2, Reg_R9 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
131 { "R10W", NULL_TREE, NULL, 2, Reg_R10 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
132 { "R11W", NULL_TREE, NULL, 2, Reg_R11 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
133 { "R12W", NULL_TREE, NULL, 2, Reg_R12 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
134 { "R13W", NULL_TREE, NULL, 2, Reg_R13 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
135 { "R14W", NULL_TREE, NULL, 2, Reg_R14 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
136 { "R15W", NULL_TREE, NULL, 2, Reg_R15 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
137 { "R8D", NULL_TREE, NULL, 4, Reg_R8 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
138 { "R9D", NULL_TREE, NULL, 4, Reg_R9 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
139 { "R10D", NULL_TREE, NULL, 4, Reg_R10 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
140 { "R11D", NULL_TREE, NULL, 4, Reg_R11 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
141 { "R12D", NULL_TREE, NULL, 4, Reg_R12 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
142 { "R13D", NULL_TREE, NULL, 4, Reg_R13 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
143 { "R14D", NULL_TREE, NULL, 4, Reg_R14 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
144 { "R15D", NULL_TREE, NULL, 4, Reg_R15 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
145 { "XMM8", NULL_TREE, NULL, 16, Reg_XMM8 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
146 { "XMM9", NULL_TREE, NULL, 16, Reg_XMM9 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
147 { "XMM10", NULL_TREE, NULL, 16, Reg_XMM10 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
148 { "XMM11", NULL_TREE, NULL, 16, Reg_XMM11 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
149 { "XMM12", NULL_TREE, NULL, 16, Reg_XMM12 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
150 { "XMM13", NULL_TREE, NULL, 16, Reg_XMM13 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
151 { "XMM14", NULL_TREE, NULL, 16, Reg_XMM14 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
152 { "XMM15", NULL_TREE, NULL, 16, Reg_XMM15 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
153 { "RIP", NULL_TREE, NULL, 8, Reg_RIP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
154 { "SIL", NULL_TREE, NULL, 1, Reg_SIL }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
155 { "DIL", NULL_TREE, NULL, 1, Reg_DIL }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
156 { "BPL", NULL_TREE, NULL, 1, Reg_BPL }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
157 { "SPL", NULL_TREE, NULL, 1, Reg_SPL }, |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
158 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
159 { "FLAGS", NULL_TREE, NULL, 0, Reg_EFLAGS }, // the gcc name is "flags"; not used in assembler input |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
160 { "CS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
161 { "DS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
162 { "SS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
163 { "ES", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
164 { "FS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
165 { "GS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
166 { "AX", NULL_TREE, NULL, 2, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
167 { "BX", NULL_TREE, NULL, 2, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
168 { "CX", NULL_TREE, NULL, 2, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
169 { "DX", NULL_TREE, NULL, 2, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
170 { "SI", NULL_TREE, NULL, 2, Reg_ESI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
171 { "DI", NULL_TREE, NULL, 2, Reg_EDI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
172 { "BP", NULL_TREE, NULL, 2, Reg_EBP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
173 { "SP", NULL_TREE, NULL, 2, Reg_ESP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
174 { "AL", NULL_TREE, NULL, 1, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
175 { "AH", NULL_TREE, NULL, 1, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
176 { "BL", NULL_TREE, NULL, 1, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
177 { "BH", NULL_TREE, NULL, 1, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
178 { "CL", NULL_TREE, NULL, 1, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
179 { "CH", NULL_TREE, NULL, 1, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
180 { "DL", NULL_TREE, NULL, 1, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
181 { "DH", NULL_TREE, NULL, 1, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
182 { "CR0", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
183 { "CR2", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
184 { "CR3", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
185 { "CR4", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
186 { "DR0", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
187 { "DR1", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
188 { "DR2", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
189 { "DR3", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
190 { "DR6", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
191 { "DR7", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
192 { "TR3", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
193 { "TR4", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
194 { "TR5", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
195 { "TR6", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
196 { "TR7", NULL_TREE, NULL, 0, -1 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
197 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
198 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
199 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
200 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
201 No_Type_Needed, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
202 Int_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
203 Word_Types, // same as Int_Types, but byte is not allowed |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
204 FP_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
205 FPInt_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
206 Byte_NoType, // byte only, but no type suffix |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
207 } TypeNeeded; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
208 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
209 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
210 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
211 No_Link, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
212 Out_Mnemonic, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
213 Next_Form |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
214 } OpLink; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
215 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
216 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
217 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
218 Clb_SizeAX = 0x01, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
219 Clb_SizeDXAX = 0x02, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
220 Clb_EAX = 0x03, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
221 Clb_DXAX_Mask = 0x03, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
222 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
223 Clb_Flags = 0x04, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
224 Clb_DI = 0x08, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
225 Clb_SI = 0x10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
226 Clb_CX = 0x20, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
227 Clb_ST = 0x40, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
228 Clb_SP = 0x80 // Doesn't actually let GCC know the frame pointer is modified |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
229 } ImplicitClober; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
230 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
231 // "^ +/..\([A-Za-z_0-9]+\).*" -> " \1," |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
232 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
233 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
234 Op_Invalid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
235 Op_Adjust, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
236 Op_Dst, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
237 Op_Upd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
238 Op_DstW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
239 Op_DstF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
240 Op_UpdF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
241 Op_DstSrc, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
242 Op_DstSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
243 Op_UpdSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
244 Op_DstSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
245 Op_UpdSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
246 Op_DstSrcSSE, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
247 Op_DstSrcMMX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
248 Op_DstSrcImmS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
249 Op_DstSrcImmM, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
250 Op_UpdSrcShft, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
251 Op_DstSrcNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
252 Op_UpdSrcNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
253 Op_DstMemNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
254 Op_DstRMBNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
255 Op_DstRMWNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
256 Op_UpdUpd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
257 Op_UpdUpdF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
258 Op_Src, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
259 Op_SrcRMWNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
260 Op_SrcW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
261 Op_SrcImm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
262 Op_Src_DXAXF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
263 Op_SrcMemNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
264 Op_SrcMemNTF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
265 Op_SrcSrc, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
266 Op_SrcSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
267 Op_SrcSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
268 Op_SrcSrcSSEF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
269 Op_SrcSrcMMX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
270 Op_Shift, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
271 Op_Branch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
272 Op_CBranch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
273 Op_0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
274 Op_0_AX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
275 Op_0_DXAX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
276 Op_Loop, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
277 Op_Flags, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
278 Op_F0_ST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
279 Op_F0_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
280 Op_Fs_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
281 Op_Fis, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
282 Op_Fis_ST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
283 Op_Fis_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
284 Op_Fid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
285 Op_Fid_P, |
1083
c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1078
diff
changeset
|
286 Op_FidR_P, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
287 Op_Ffd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
288 Op_FfdR, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
289 Op_Ffd_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
290 Op_FfdR_P, |
1058
8bc277ef23a5
Applied rev two operand form fstp fix to x86-64 asm
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1053
diff
changeset
|
291 Op_FfdRR_P, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
292 Op_Fd_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
293 Op_FdST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
294 Op_FMath, |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
295 Op_FMath0, |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
296 Op_FMath2, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
297 Op_FdSTiSTi, |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
298 Op_FdST0ST1, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
299 Op_FPMath, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
300 Op_FCmp, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
301 Op_FCmp1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
302 Op_FCmpP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
303 Op_FCmpP1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
304 Op_FCmpFlg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
305 Op_FCmpFlgP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
306 Op_fld, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
307 Op_fldR, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
308 Op_fxch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
309 Op_fxch1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
310 Op_fxch0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
311 Op_SizedStack, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
312 Op_bound, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
313 Op_bswap, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
314 Op_cmps, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
315 Op_cmpsd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
316 Op_cmpsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
317 Op_cmpxchg8b, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
318 Op_cmpxchg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
319 Op_cpuid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
320 Op_enter, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
321 Op_fdisi, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
322 Op_feni, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
323 Op_fsetpm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
324 Op_fXstsw, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
325 Op_imul, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
326 Op_imul2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
327 Op_imul1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
328 Op_in, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
329 Op_ins, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
330 Op_insX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
331 Op_iret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
332 Op_iretd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
333 Op_lods, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
334 Op_lodsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
335 Op_movs, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
336 Op_movsd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
337 Op_movsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
338 Op_movsx, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
339 Op_movzx, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
340 Op_mul, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
341 Op_out, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
342 Op_outs, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
343 Op_outsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
344 Op_push, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
345 Op_ret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
346 Op_retf, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
347 Op_scas, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
348 Op_scasX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
349 Op_stos, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
350 Op_stosX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
351 Op_xlat, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
352 N_AsmOpInfo, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
353 Op_Align, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
354 Op_Even, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
355 Op_Naked, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
356 Op_db, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
357 Op_ds, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
358 Op_di, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
359 Op_dl, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
360 Op_df, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
361 Op_dd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
362 Op_de |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
363 } AsmOp; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
364 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
365 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
366 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
367 Opr_None = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
368 OprC_MRI = 1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
369 OprC_MR = 2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
370 OprC_Mem = 3, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
371 OprC_Reg = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
372 OprC_Imm = 5, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
373 OprC_SSE = 6, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
374 OprC_SSE_Mem = 7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
375 OprC_R32 = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
376 OprC_RWord = 9, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
377 OprC_RFP = 10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
378 OprC_AbsRel = 11, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
379 OprC_Relative = 12, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
380 OprC_Port = 13, // DX or imm |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
381 OprC_AX = 14, // AL,AX,EAX |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
382 OprC_DX = 15, // only DX |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
383 OprC_MMX = 16, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
384 OprC_MMX_Mem = 17, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
385 OprC_Shift = 18, // imm or CL |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
386 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
387 Opr_ClassMask = 0x1f, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
388 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
389 Opr_Dest = 0x20, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
390 Opr_Update = 0x60, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
391 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
392 Opr_NoType = 0x80, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
393 } OprVals; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
394 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
395 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
396 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
397 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
398 } AsmOprInfo; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
399 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
400 typedef unsigned char Opr; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
401 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
402 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
403 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
404 Opr operands[3]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
405 unsigned char |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
406 needsType : 3, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
407 implicitClobbers : 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
408 linkType : 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
409 unsigned link; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
410 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
411 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
412 bool takesLabel() { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
413 return operands[0] & Opr_Label; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
414 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
415 */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
416 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
417 unsigned nOperands() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
418 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
419 if ( !operands[0] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
420 return 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
421 else if ( !operands[1] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
422 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
423 else if ( !operands[2] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
424 return 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
425 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
426 return 3; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
427 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
428 } AsmOpInfo; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
429 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
430 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
431 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
432 Mn_fdisi, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
433 Mn_feni, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
434 Mn_fsetpm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
435 Mn_iretw, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
436 Mn_iret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
437 Mn_lret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
438 Mn_cmpxchg8b, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
439 N_AltMn |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
440 } Alternate_Mnemonics; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
441 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
442 static const char * alternateMnemonics[N_AltMn] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
443 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
444 ".byte 0xdb, 0xe1", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
445 ".byte 0xdb, 0xe0", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
446 ".byte 0xdb, 0xe4", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
447 "iretw", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
448 "iret", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
449 "lret", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
450 "cmpxchg8b" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
451 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
452 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
453 #define mri OprC_MRI |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
454 #define mr OprC_MR |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
455 #define mem OprC_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
456 // for now mfp=mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
457 #define mfp OprC_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
458 #define reg OprC_Reg |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
459 #define imm OprC_Imm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
460 #define sse OprC_SSE |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
461 #define ssem OprC_SSE_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
462 #define mmx OprC_MMX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
463 #define mmxm OprC_MMX_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
464 #define r32 OprC_R32 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
465 #define rw OprC_RWord |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
466 #define rfp OprC_RFP |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
467 #define port OprC_Port |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
468 #define ax OprC_AX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
469 #define dx OprC_DX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
470 #define shft OprC_Shift |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
471 #define D Opr_Dest |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
472 #define U Opr_Update |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
473 #define N Opr_NoType |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
474 //#define L Opr_Label |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
475 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
476 // D=dest, N=notype |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
477 static AsmOpInfo asmOpInfo[N_AsmOpInfo] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
478 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
479 /* Op_Invalid */ {}, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
480 /* Op_Adjust */ { 0,0,0, 0, Clb_EAX /*just AX*/ }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
481 /* Op_Dst */ { D|mr, 0, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
482 /* Op_Upd */ { U|mr, 0, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
483 /* Op_DstW */ { D|mr, 0, 0, Word_Types }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
484 /* Op_DstF */ { D|mr, 0, 0, 1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
485 /* Op_UpdF */ { U|mr, 0, 0, 1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
486 /* Op_DstSrc */ { D|mr, mri, 0,/**/1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
487 /* Op_DstSrcF */ { D|mr, mri, 0,/**/1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
488 /* Op_UpdSrcF */ { U|mr, mri, 0,/**/1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
489 /* Op_DstSrcFW */ { D|mr, mri, 0,/**/Word_Types, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
490 /* Op_UpdSrcFW */ { U|mr, mri, 0,/**/Word_Types, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
491 /* Op_DstSrcSSE */ { U|sse, ssem, 0 }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
492 /* Op_DstSrcMMX */ { U|mmx, mmxm, 0 }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
493 /* Op_DstSrcImmS*/ { U|sse, ssem, N|imm }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
494 /* Op_DstSrcImmM*/ { U|mmx, mmxm, N|imm }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
495 /* Op_UpdSrcShft*/ { U|mr, reg, N|shft, 1, Clb_Flags }, // 16/32 only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
496 /* Op_DstSrcNT */ { D|mr, mr, 0, 0 }, // used for movd .. operands can be rm32,sse,mmx |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
497 /* Op_UpdSrcNT */ { U|mr, mr, 0, 0 }, // used for movd .. operands can be rm32,sse,mmx |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
498 /* Op_DstMemNT */ { D|mem, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
499 /* Op_DstRMBNT */ { D|mr, 0, 0, Byte_NoType }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
500 /* Op_DstRMWNT */ { D|mr, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
501 /* Op_UpdUpd */ { U|mr,U|mr, 0,/**/1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
502 /* Op_UpdUpdF */ { U|mr,U|mr, 0,/**/1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
503 /* Op_Src */ { mri, 0, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
504 /* Op_SrcRMWNT */ { mr, 0, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
505 /* Op_SrcW */ { mri, 0, 0, Word_Types }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
506 /* Op_SrcImm */ { imm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
507 /* Op_Src_DXAXF */ { mr, 0, 0, 1, Clb_SizeDXAX|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
508 /* Op_SrcMemNT */ { mem, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
509 /* Op_SrcMemNTF */ { mem, 0, 0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
510 /* Op_SrcSrc */ { mr, mri, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
511 /* Op_SrcSrcF */ { mr, mri, 0, 1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
512 /* Op_SrcSrcFW */ { mr, mri, 0, Word_Types, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
513 /* Op_SrcSrcSSEF*/ { sse, ssem, 0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
514 /* Op_SrcSrcMMX */ { mmx, mmx, 0, }, |
961
f33413a955fa
Fix shl/r bad operand size error
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
944
diff
changeset
|
515 /* Op_Shift */ { D|mr,N|shft, 0,/**/0, Clb_Flags }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
516 /* Op_Branch */ { mri }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
517 /* Op_CBranch */ { imm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
518 /* Op_0 */ { 0,0,0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
519 /* Op_0_AX */ { 0,0,0, 0, Clb_SizeAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
520 /* Op_0_DXAX */ { 0,0,0, 0, Clb_SizeDXAX }, // but for cwd/cdq -- how do know the size.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
521 /* Op_Loop */ { imm, 0, 0, 0, Clb_CX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
522 /* Op_Flags */ { 0,0,0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
523 /* Op_F0_ST */ { 0,0,0, 0, Clb_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
524 /* Op_F0_P */ { 0,0,0, 0, Clb_ST }, // push, pops, etc. not sure how to inform gcc.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
525 /* Op_Fs_P */ { mem, 0, 0, 0, Clb_ST }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
526 /* Op_Fis */ { mem, 0, 0, FPInt_Types }, // only 16bit and 32bit, DMD defaults to 16bit |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
527 /* Op_Fis_ST */ { mem, 0, 0, FPInt_Types, Clb_ST }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
528 /* Op_Fis_P */ { mem, 0, 0, FPInt_Types, Clb_ST }, // push and pop, fild so also 64 bit |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
529 /* Op_Fid */ { D|mem, 0, 0, FPInt_Types }, // only 16bit and 32bit, DMD defaults to 16bit |
1085
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
530 /* Op_Fid_P */ { D|mem, 0, 0, FPInt_Types, Clb_ST, Next_Form, Op_FidR_P }, // push and pop, fild so also 64 bit |
1100
b3a0cf072ed0
Fix an error in the ASM tables introduced by the recent fistp fixes.
Frits van Bommel <fvbommel wxs.nl>
parents:
1098
diff
changeset
|
531 /* Op_FidR_P */ { D|mem,rfp, 0, FPInt_Types, Clb_ST }, // push and pop, fild so also 64 bit |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
532 /* Op_Ffd */ { D|mfp, 0, 0, FP_Types, 0, Next_Form, Op_FfdR }, // only 16bit and 32bit, DMD defaults to 16bit, reg form doesn't need type |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
533 /* Op_FfdR */ { D|rfp, 0, 0 }, |
1058
8bc277ef23a5
Applied rev two operand form fstp fix to x86-64 asm
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1053
diff
changeset
|
534 /* Op_Ffd_P */ { D|mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_FfdR_P }, // pop, fld so also 80 bit, " |
8bc277ef23a5
Applied rev two operand form fstp fix to x86-64 asm
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1053
diff
changeset
|
535 /* Op_FfdR_P */ { D|rfp, 0, 0, 0, Clb_ST, Next_Form, Op_FfdRR_P }, |
1108
d03814546977
Apply r1106 to x86-64 asm too
Frits van Bommel <fvbommel wxs.nl>
parents:
1102
diff
changeset
|
536 /* Op_FfdRR_P */ { D|rfp,rfp, 0, 0, Clb_ST }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
537 /* Op_Fd_P */ { D|mem, 0, 0, 0, Clb_ST }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
538 /* Op_FdST */ { D|rfp, 0, 0 }, |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
539 /* Op_FMath */ { mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_FMath0 }, // and only single or double prec |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
540 /* Op_FMath0 */ { 0, 0, 0, 0, Clb_ST, Next_Form, Op_FMath2 }, // pops |
1101
8bf8b058944a
Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents:
1100
diff
changeset
|
541 /* Op_FMath2 */ { D|rfp, rfp, 0, 0, Clb_ST, Next_Form, Op_FdST0ST1 }, // and only single or double prec |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
542 /* Op_FdSTiSTi */ { D|rfp, rfp, 0, }, |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
543 /* Op_FdST0ST1 */ { 0, 0, 0, }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
544 /* Op_FPMath */ { D|rfp, rfp, 0, 0, Clb_ST, Next_Form, Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
545 /* Op_FCmp */ { mfp, 0, 0, FP_Types, 0, Next_Form, Op_FCmp1 }, // DMD defaults to float ptr |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
546 /* Op_FCmp1 */ { rfp, 0, 0, 0, 0, Next_Form, Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
547 /* Op_FCmpP */ { mfp, 0, 0, FP_Types, 0, Next_Form, Op_FCmpP1 }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
548 /* Op_FCmpP1 */ { rfp, 0, 0, 0, 0, Next_Form, Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
549 /* Op_FCmpFlg */ { rfp, rfp, 0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
550 /* Op_FCmpFlgP */ { rfp, rfp, 0, 0, Clb_Flags }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
551 /* Op_fld */ { mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_fldR }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
552 /* Op_fldR */ { rfp, 0, 0, 0, Clb_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
553 /* Op_fxch */ { D|rfp,D|rfp, 0, 0, Clb_ST, Next_Form, Op_fxch1 }, // not in intel manual?, but DMD allows it (gas won't), second arg must be ST |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
554 /* Op_fxch1 */ { D|rfp, 0, 0, 0, Clb_ST, Next_Form, Op_fxch0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
555 /* Op_fxch0 */ { 0, 0, 0, 0, Clb_ST }, // Also clobbers ST(1) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
556 /* Op_SizedStack*/ { 0, 0, 0, 0, Clb_SP }, // type suffix special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
557 /* Op_bound */ { mr, mri, 0, Word_Types }, // operands *not* reversed for gas |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
558 /* Op_bswap */ { D|r32 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
559 /* Op_cmps */ { mem, mem, 0, 1, Clb_DI|Clb_SI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
560 /* Op_cmpsd */ { 0, 0, 0, 0, Clb_DI|Clb_SI|Clb_Flags, Next_Form, Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
561 /* Op_cmpsX */ { 0, 0, 0, 0, Clb_DI|Clb_SI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
562 /* Op_cmpxchg8b */ { D|mem/*64*/,0,0, 0, Clb_SizeDXAX/*32*/|Clb_Flags, Out_Mnemonic, Mn_cmpxchg8b }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
563 /* Op_cmpxchg */ { D|mr, reg, 0, 1, Clb_SizeAX|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
564 /* Op_cpuid */ { 0,0,0 }, // Clobbers eax, ebx, ecx, and edx. Handled specially below. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
565 /* Op_enter */ { imm, imm }, // operands *not* reversed for gas, %% inform gcc of EBP clobber?, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
566 /* Op_fdisi */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_fdisi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
567 /* Op_feni */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_feni }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
568 /* Op_fsetpm */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_fsetpm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
569 /* Op_fXstsw */ { D|mr, 0, 0, }, // ax is the only allowed register |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
570 /* Op_imul */ { D|reg, mr, imm, 1, Clb_Flags, Next_Form, Op_imul2 }, // 16/32 only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
571 /* Op_imul2 */ { D|reg, mri, 0, 1, Clb_Flags, Next_Form, Op_imul1 }, // 16/32 only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
572 /* Op_imul1 */ { mr, 0, 0, 1, Clb_Flags|Clb_SizeDXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
573 /* Op_in */ { D|ax,N|port,0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
574 /* Op_ins */ { mem,N|dx, 0, 1, Clb_DI }, // can't override ES segment for this one |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
575 /* Op_insX */ { 0, 0, 0, 0, Clb_DI }, // output segment overrides %% needs work |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
576 /* Op_iret */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_iretw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
577 /* Op_iretd */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_iret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
578 /* Op_lods */ { mem, 0, 0, 1, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
579 /* Op_lodsX */ { 0, 0, 0, 0, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
580 /* Op_movs */ { mem, mem, 0, 1, Clb_DI|Clb_SI }, // only src/DS can be overridden |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
581 /* Op_movsd */ { 0, 0, 0, 0, Clb_DI|Clb_SI, Next_Form, Op_DstSrcSSE }, // %% gas doesn't accept movsd .. has to movsl |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
582 /* Op_movsX */ { 0, 0, 0, 0, Clb_DI|Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
583 /* Op_movsx */ { D|reg, mr, 0, 1 }, // type suffix is special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
584 /* Op_movzx */ { D|reg, mr, 0, 1 }, // type suffix is special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
585 /* Op_mul */ { U|ax, mr, 0, 1, Clb_SizeDXAX|Clb_Flags, Next_Form, Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
586 /* Op_out */ { N|port,ax, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
587 /* Op_outs */ { N|dx, mem, 0, 1, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
588 /* Op_outsX */ { 0, 0, 0, 0, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
589 /* Op_push */ { mri, 0, 0, 0, Clb_SP }, // would be Op_SrcW, but DMD defaults to 32-bit for immediate form |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
590 /* Op_ret */ { imm, 0, 0, 0, 0, Next_Form, Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
591 /* Op_retf */ { 0, 0, 0, 0, 0, Out_Mnemonic, Mn_lret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
592 /* Op_scas */ { mem, 0, 0, 1, Clb_DI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
593 /* Op_scasX */ { 0, 0, 0, 0, Clb_DI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
594 /* Op_stos */ { mem, 0, 0, 1, Clb_DI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
595 /* Op_stosX */ { 0, 0, 0, 0, Clb_DI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
596 /* Op_xlat */ { mem, 0, 0, 0, Clb_SizeAX } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
597 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
598 /// * Op_arpl */ { D|mr, reg }, // 16 only -> DstSrc |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
599 /// * Op_bsX */ { rw, mrw, 0, 1, Clb_Flags },//->srcsrcf |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
600 /// * Op_bt */ { mrw, riw, 0, 1, Clb_Flags },//->srcsrcf |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
601 /// * Op_btX */ { D|mrw, riw, 0, 1, Clb_Flags },//->dstsrcf .. immediate does not contribute to size |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
602 /// * Op_cmovCC */ { D|rw, mrw, 0, 1 } // ->dstsrc |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
603 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
604 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
605 #undef mri |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
606 #undef mr |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
607 #undef mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
608 #undef mfp |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
609 #undef reg |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
610 #undef imm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
611 #undef sse |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
612 #undef ssem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
613 #undef mmx |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
614 #undef mmxm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
615 #undef r32 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
616 #undef rw |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
617 #undef rfp |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
618 #undef port |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
619 #undef ax |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
620 #undef dx |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
621 #undef shft |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
622 #undef D |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
623 #undef U |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
624 #undef N |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
625 //#undef L |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
626 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
627 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
628 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
629 const char * inMnemonic; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
630 AsmOp asmOp; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
631 } AsmOpEnt; |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
632 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
633 /* Some opcodes which have data size restrictions, but we don't check |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
634 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
635 cmov, l<segreg> ?, lea, lsl, shld |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
636 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
637 todo: push <immediate> is always the 32-bit form, even tho push <mem> is 16-bit |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
638 */ |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
639 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
640 static AsmOpEnt opData[] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
641 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
642 { "adc", Op_UpdSrcF }, |
979
523bf4f166bc
Fix some assembler issues:
Frits van Bommel <fvbommel wxs.nl>
parents:
970
diff
changeset
|
643 { "add", Op_UpdSrcF }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
644 { "addpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
645 { "addps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
646 { "addq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
647 { "addsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
648 { "addss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
649 { "addsubpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
650 { "addsubps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
651 { "and", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
652 { "andnpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
653 { "andnps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
654 { "andpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
655 { "andps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
656 { "bsf", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
657 { "bsr", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
658 { "bswap", Op_bswap }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
659 { "bt", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
660 { "btc", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
661 { "btr", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
662 { "bts", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
663 { "call", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
664 { "callf", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
665 { "cbw", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
666 { "cdqe", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
667 { "clc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
668 { "cld", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
669 { "clflush",Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
670 { "cli", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
671 { "clts", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
672 { "cmc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
673 { "cmova", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
674 { "cmovae", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
675 { "cmovb", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
676 { "cmovbe", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
677 { "cmovc", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
678 { "cmove", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
679 { "cmovg", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
680 { "cmovge", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
681 { "cmovl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
682 { "cmovle", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
683 { "cmovna", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
684 { "cmovnae",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
685 { "cmovnb", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
686 { "cmovnbe",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
687 { "cmovnc", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
688 { "cmovne", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
689 { "cmovng", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
690 { "cmovnge",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
691 { "cmovnl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
692 { "cmovnle",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
693 { "cmovno", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
694 { "cmovnp", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
695 { "cmovns", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
696 { "cmovnz", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
697 { "cmovo", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
698 { "cmovp", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
699 { "cmovpe", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
700 { "cmovpo", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
701 { "cmovs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
702 { "cmovz", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
703 { "cmp", Op_SrcSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
704 { "cmppd", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
705 { "cmpps", Op_DstSrcImmS }, |
1016
16e2c750c857
Just forgot an opcode for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
979
diff
changeset
|
706 { "cmpq", Op_DstSrcNT }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
707 { "cmps", Op_cmps }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
708 { "cmpsb", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
709 { "cmpsd", Op_cmpsd }, // string cmp, and SSE cmp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
710 { "cmpss", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
711 { "cmpsw", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
712 { "cmpsq", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
713 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
714 { "cdqe", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
715 { "cmpsq", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
716 { "cmpxch16b", Op_cmpxchg16b }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
717 { "cqo", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
718 { "lodsq", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
719 { "movsq", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
720 { "popfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
721 { "pushfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
722 { "scasq", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
723 { "stosq", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
724 { "iretq", Op_iretd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
725 { "swapgs", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
726 { "extrq", Op_Extrq }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
727 { "movsxq", Op_movsxq }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
728 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
729 { "clgi", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
730 { "invlpga", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
731 { "rdtscp", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
732 { "stgi", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
733 { "sysret", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
734 */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
735 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
736 { "cmpxch16b", Op_cmpxchg8b }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
737 { "cmpxch8b", Op_cmpxchg8b }, // %% DMD opcode typo? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
738 { "cmpxchg", Op_cmpxchg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
739 { "comisd", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
740 { "comiss", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
741 { "cpuid", Op_cpuid }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
742 { "cvtdq2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
743 { "cvtdq2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
744 { "cvtpd2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
745 { "cvtpd2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
746 { "cvtpd2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
747 { "cvtpi2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
748 { "cvtpi2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
749 { "cvtps2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
750 { "cvtps2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
751 { "cvtps2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
752 { "cvtsd2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
753 { "cvtsd2ss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
754 { "cvtsi2sd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
755 { "cvtsi2ss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
756 { "cvtss2sd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
757 { "cvtss2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
758 { "cvttpd2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
759 { "cvttpd2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
760 { "cvttps2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
761 { "cvttps2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
762 { "cvttsd2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
763 { "cvttss2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
764 { "cwd", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
765 { "cwde", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
766 //{ "da", Op_ },// dunno what this is -- takes labels? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
767 { "db", Op_db }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
768 { "dd", Op_dd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
769 { "de", Op_de }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
770 { "dec", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
771 { "df", Op_df }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
772 { "di", Op_di }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
773 { "div", Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
774 { "divpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
775 { "divps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
776 { "divsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
777 { "divss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
778 { "dl", Op_dl }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
779 { "dq", Op_dl }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
780 { "ds", Op_ds }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
781 { "dt", Op_de }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
782 { "dw", Op_ds }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
783 { "emms", Op_0 }, // clobber all mmx/fp? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
784 { "enter", Op_enter }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
785 { "f2xm1", Op_F0_ST }, // %% most of these are update... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
786 { "fabs", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
787 { "fadd", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
788 { "faddp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
789 { "fbld", Op_Fs_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
790 { "fbstp", Op_Fd_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
791 { "fchs", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
792 { "fclex", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
793 { "fcmovb", Op_FdSTiSTi }, // but only ST(0) can be the destination -- should be FdST0STi |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
794 { "fcmovbe", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
795 { "fcmove", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
796 { "fcmovnb", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
797 { "fcmovnbe", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
798 { "fcmovne", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
799 { "fcmovnu", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
800 { "fcmovu", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
801 { "fcom", Op_FCmp }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
802 { "fcomi", Op_FCmpFlg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
803 { "fcomip", Op_FCmpFlgP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
804 { "fcomp", Op_FCmpP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
805 { "fcompp", Op_F0_P }, // pops twice |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
806 { "fcos", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
807 { "fdecstp",Op_F0_P }, // changes stack |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
808 { "fdisi", Op_fdisi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
809 { "fdiv", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
810 { "fdivp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
811 { "fdivr", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
812 { "fdivrp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
813 { "feni", Op_feni }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
814 { "ffree", Op_FdST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
815 { "fiadd", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
816 { "ficom", Op_Fis }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
817 { "ficomp", Op_Fis_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
818 { "fidiv", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
819 { "fidivr", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
820 { "fild", Op_Fis_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
821 { "fimul", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
822 { "fincstp",Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
823 { "finit", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
824 { "fist", Op_Fid }, // only 16,32bit |
1085
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
825 { "fistp", Op_Fid_P }, |
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
826 { "fisttp", Op_Fid_P }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
827 { "fisub", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
828 { "fisubr", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
829 { "fld", Op_fld }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
830 { "fld1", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
831 { "fldcw", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
832 { "fldenv", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
833 { "fldl2e", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
834 { "fldl2t", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
835 { "fldlg2", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
836 { "fldln2", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
837 { "fldpi", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
838 { "fldz", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
839 { "fmul", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
840 { "fmulp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
841 { "fnclex", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
842 { "fndisi", Op_fdisi }, // ?? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
843 { "fneni", Op_feni }, // ?? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
844 { "fninit", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
845 { "fnop", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
846 { "fnsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
847 { "fnstcw", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
848 { "fnstenv",Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
849 { "fnstsw", Op_fXstsw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
850 { "fpatan", Op_F0_P }, // pop and modify new ST |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
851 { "fprem", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
852 { "fprem1", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
853 { "fptan", Op_F0_P }, // modify ST and push 1.0 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
854 { "frndint",Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
855 { "frstor", Op_SrcMemNT }, // but clobbers everything |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
856 { "fsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
857 { "fscale", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
858 { "fsetpm", Op_fsetpm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
859 { "fsin", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
860 { "fsincos",Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
861 { "fsqrt", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
862 { "fst", Op_Ffd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
863 { "fstcw", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
864 { "fstenv", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
865 { "fstp", Op_Ffd_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
866 { "fstsw", Op_fXstsw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
867 { "fsub", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
868 { "fsubp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
869 { "fsubr", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
870 { "fsubrp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
871 { "ftst", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
872 { "fucom", Op_FCmp }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
873 { "fucomi", Op_FCmpFlg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
874 { "fucomip",Op_FCmpFlgP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
875 { "fucomp", Op_FCmpP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
876 { "fucompp",Op_F0_P }, // pops twice |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
877 { "fwait", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
878 { "fxam", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
879 { "fxch", Op_fxch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
880 { "fxrstor",Op_SrcMemNT }, // clobbers FP,MMX,SSE |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
881 { "fxsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
882 { "fxtract",Op_F0_P }, // pushes |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
883 { "fyl2x", Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
884 { "fyl2xp1",Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
885 { "haddpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
886 { "haddps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
887 { "hlt", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
888 { "hsubpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
889 { "hsubps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
890 { "idiv", Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
891 { "imul", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
892 { "in", Op_in }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
893 { "inc", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
894 { "ins", Op_ins }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
895 { "insb", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
896 { "insd", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
897 { "insw", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
898 { "int", Op_SrcImm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
899 { "into", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
900 { "invd", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
901 { "invlpg", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
902 { "iret", Op_iret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
903 { "iretd", Op_iretd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
904 { "iretq", Op_iretd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
905 { "ja", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
906 { "jae", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
907 { "jb", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
908 { "jbe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
909 { "jc", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
910 { "jcxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
911 { "je", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
912 { "jecxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
913 { "jg", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
914 { "jge", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
915 { "jl", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
916 { "jle", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
917 { "jmp", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
918 { "jmpe", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
919 { "jmpf", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
920 { "jna", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
921 { "jnae", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
922 { "jnb", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
923 { "jnbe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
924 { "jnc", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
925 { "jne", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
926 { "jng", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
927 { "jnge", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
928 { "jnl", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
929 { "jnle", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
930 { "jno", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
931 { "jnp", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
932 { "jns", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
933 { "jnz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
934 { "jo", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
935 { "jp", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
936 { "jpe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
937 { "jpo", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
938 { "jrcxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
939 { "js", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
940 { "jz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
941 { "lahf", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
942 { "lar", Op_DstSrcFW }, // reg dest only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
943 { "lddqu", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
944 { "ldmxcsr", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
945 { "lds", Op_DstSrc }, // reg dest only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
946 { "lea", Op_DstSrc }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
947 { "leaq", Op_DstSrcSSE }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
948 { "leave", Op_0 }, // EBP,ESP clobbers |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
949 { "lfence",Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
950 { "lfs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
951 { "lgdt", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
952 { "lgs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
953 { "lidt", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
954 { "lldt", Op_SrcRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
955 { "lmsw", Op_SrcRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
956 { "lock", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
957 { "lods", Op_lods }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
958 { "lodsb", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
959 { "lodsd", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
960 { "lodsw", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
961 { "lodsq", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
962 { "loop", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
963 { "loope", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
964 { "loopne",Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
965 { "loopnz",Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
966 { "loopz", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
967 { "lsl", Op_DstSrcFW }, // reg dest only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
968 { "lss", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
969 { "ltr", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
970 { "maskmovdqu", Op_SrcSrcMMX }, // writes to [edi] |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
971 { "maskmovq", Op_SrcSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
972 { "maxpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
973 { "maxps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
974 { "maxsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
975 { "maxss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
976 { "mfence",Op_0}, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
977 { "minpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
978 { "minps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
979 { "minsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
980 { "minss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
981 { "monitor", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
982 { "mov", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
983 { "movapd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
984 { "movaps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
985 { "movb", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
986 { "movd", Op_DstSrcNT }, // also mmx and sse |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
987 { "movddup", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
988 { "movdq2q", Op_DstSrcNT }, // mmx/sse |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
989 { "movdqa", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
990 { "movdqu", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
991 { "movhlps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
992 { "movhpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
993 { "movhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
994 { "movl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
995 { "movlhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
996 { "movlpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
997 { "movlps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
998 { "movmskpd",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
999 { "movmskps",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1000 { "movntdq", Op_DstSrcNT }, // limited to sse, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1001 { "movnti", Op_DstSrcNT }, // limited to gpr, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1002 { "movntpd", Op_DstSrcNT }, // limited to sse, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1003 { "movntps", Op_DstSrcNT }, // limited to sse, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1004 { "movntq", Op_DstSrcNT }, // limited to mmx, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1005 { "movq", Op_DstSrcNT }, // limited to sse and mmx |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1006 { "movq2dq", Op_DstSrcNT }, // limited to sse <- mmx regs |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1007 { "movs", Op_movs }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1008 { "movsb", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1009 { "movsd", Op_movsd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1010 { "movsq", Op_movsd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1011 { "movshdup", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1012 { "movsldup", Op_DstSrcSSE }, |
970
fb31a4afa2df
Revert wilsonk's "fix" for the callingconv1.d problem.
Frits van Bommel <fvbommel wxs.nl>
parents:
966
diff
changeset
|
1013 { "movss", Op_DstSrcSSE }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1014 { "movsw", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1015 { "movsx", Op_movsx }, // word-only, reg dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1016 { "movsxd", Op_movsx }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1017 { "movupd",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1018 { "movups",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1019 { "movzbl", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1020 { "movzx", Op_movzx }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1021 { "mul", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1022 { "mulpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1023 { "mulps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1024 { "mulsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1025 { "mulss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1026 { "mwait", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1027 { "naked", Op_Naked }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1028 { "neg", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1029 { "nop", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1030 { "not", Op_Upd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1031 { "or", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1032 { "orpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1033 { "orps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1034 { "out", Op_out }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1035 { "outs", Op_outs }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1036 { "outsb", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1037 { "outsd", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1038 { "outsw", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1039 { "pabsb", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1040 { "pabsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1041 { "pabsq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1042 { "packssdw", Op_DstSrcMMX }, // %% also SSE |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1043 { "packsswb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1044 { "packuswb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1045 { "paddb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1046 { "paddd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1047 { "paddq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1048 { "paddsb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1049 { "paddsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1050 { "paddusb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1051 { "paddusw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1052 { "paddw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1053 { "palignr", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1054 { "pand", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1055 { "pandn", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1056 { "pause", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1057 { "pavgb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1058 { "pavgw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1059 { "pcmpeqb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1060 { "pcmpeqd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1061 { "pcmpeqw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1062 { "pcmpgtb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1063 { "pcmpgtd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1064 { "pcmpgtw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1065 { "pextrw", Op_DstSrcImmM }, // gpr32 dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1066 { "phaddd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1067 { "phaddsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1068 { "phaddw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1069 { "phsubd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1070 { "phsubsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1071 { "phsubw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1072 { "pinsrw", Op_DstSrcImmM }, // gpr32(16), mem16 src, sse too |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1073 { "pmaddubsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1074 { "pmaddwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1075 { "pmaxsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1076 { "pmaxub", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1077 { "pminsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1078 { "pminub", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1079 { "pmovmskb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1080 { "pmulhrsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1081 { "pmulhuw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1082 { "pmulhw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1083 { "pmullw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1084 { "pmuludq", Op_DstSrcMMX }, // also sse |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1085 { "popf", Op_SizedStack }, // rewrite the insn with a special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1086 { "popfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1087 { "popq", Op_push }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1088 { "por", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1089 { "prefetchnta", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1090 { "prefetcht0", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1091 { "prefetcht1", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1092 { "prefetcht2", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1093 { "psadbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1094 { "pshufb", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1095 { "pshufd", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1096 { "pshufhw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1097 { "pshuflw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1098 { "pshufw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1099 { "psignb", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1100 { "psignd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1101 { "psignw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1102 { "pslld", Op_DstSrcMMX }, // immediate operands... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1103 { "pslldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1104 { "psllq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1105 { "psllw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1106 { "psrad", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1107 { "psraw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1108 { "psrld", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1109 { "psrldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1110 { "psrlq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1111 { "psrlw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1112 { "psubb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1113 { "psubd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1114 { "psubq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1115 { "psubsb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1116 { "psubsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1117 { "psubusb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1118 { "psubusw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1119 { "psubw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1120 { "punpckhbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1121 { "punpckhdq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1122 { "punpckhqdq",Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1123 { "punpckhwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1124 { "punpcklbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1125 { "punpckldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1126 { "punpcklqdq",Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1127 { "punpcklwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1128 { "pushf", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1129 { "pushfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1130 { "pushq", Op_push }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1131 { "pxor", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1132 { "rcl", Op_Shift }, // limited src operands -- change to shift |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1133 { "rcpps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1134 { "rcpss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1135 { "rcr", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1136 { "rdmsr", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1137 { "rdpmc", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1138 { "rdtsc", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1139 { "rep", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1140 { "repe", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1141 { "repne", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1142 { "repnz", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1143 { "repz", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1144 { "ret", Op_ret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1145 { "retf", Op_retf }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1146 { "retn", Op_retf }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1147 { "rol", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1148 { "ror", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1149 { "rsm", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1150 { "rsqrtps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1151 { "rsqrtss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1152 { "sahf", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1153 { "sal", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1154 { "salq", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1155 { "sar", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1156 { "sbb", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1157 { "scas", Op_scas }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1158 { "scasb", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1159 { "scasd", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1160 { "scasw", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1161 { "scasq", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1162 { "seta", Op_DstRMBNT }, // also gpr8 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1163 { "setae", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1164 { "setb", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1165 { "setbe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1166 { "setc", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1167 { "sete", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1168 { "setg", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1169 { "setge", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1170 { "setl", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1171 { "setle", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1172 { "setna", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1173 { "setnae", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1174 { "setnb", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1175 { "setnbe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1176 { "setnc", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1177 { "setne", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1178 { "setng", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1179 { "setnge", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1180 { "setnl", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1181 { "setnle", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1182 { "setno", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1183 { "setnp", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1184 { "setns", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1185 { "setnz", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1186 { "seto", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1187 { "setp", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1188 { "setpe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1189 { "setpo", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1190 { "sets", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1191 { "setz", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1192 { "sfence", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1193 { "sgdt", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1194 { "shl", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1195 { "shld", Op_UpdSrcShft }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1196 { "shr", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1197 { "shrd", Op_UpdSrcShft }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1198 { "shufpd", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1199 { "shufps", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1200 { "sidt", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1201 { "sldt", Op_DstRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1202 { "smsw", Op_DstRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1203 { "sqrtpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1204 { "sqrtps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1205 { "sqrtsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1206 { "sqrtss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1207 { "stc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1208 { "std", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1209 { "sti", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1210 { "stmxcsr",Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1211 { "stos", Op_stos }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1212 { "stosb", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1213 { "stosd", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1214 { "stosw", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1215 { "stosq", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1216 { "str", Op_DstMemNT }, // also r16 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1217 { "sub", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1218 { "subpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1219 { "subps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1220 { "subq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1221 { "subsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1222 { "subss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1223 { "swapgs", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1224 { "sysenter",Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1225 { "sysexit", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1226 { "sysret", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1227 { "testl", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1228 { "ucomisd", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1229 { "ucomiss", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1230 { "ud2", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1231 { "unpckhpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1232 { "unpckhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1233 { "unpcklpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1234 { "unpcklps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1235 { "verr", Op_SrcMemNTF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1236 { "verw", Op_SrcMemNTF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1237 { "wbinvd", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1238 { "wrmsr", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1239 { "xadd", Op_UpdUpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1240 { "xchg", Op_UpdUpd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1241 { "xlat", Op_xlat }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1242 { "xlatb", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1243 { "xor", Op_DstSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1244 { "xorpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1245 { "xorps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1246 { "xorq", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1247 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1248 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1249 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1250 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1251 Default_Ptr = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1252 Byte_Ptr = 1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1253 Short_Ptr = 2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1254 Int_Ptr = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1255 QWord_Ptr = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1256 Float_Ptr = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1257 Double_Ptr = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1258 Extended_Ptr = 10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1259 Near_Ptr = 98, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1260 Far_Ptr = 99, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1261 N_PtrTypes |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1262 } PtrType; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1263 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1264 static const int N_PtrNames = 8; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1265 static const char * ptrTypeNameTable[N_PtrNames] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1266 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1267 "word", "dword", "qword", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1268 "float", "double", "extended", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1269 "near", "far" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1270 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1271 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1272 static Identifier * ptrTypeIdentTable[N_PtrNames]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1273 static PtrType ptrTypeValueTable[N_PtrNames] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1274 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1275 Short_Ptr, Int_Ptr, QWord_Ptr, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1276 Float_Ptr, Double_Ptr, Extended_Ptr, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1277 Near_Ptr, Far_Ptr |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1278 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1279 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1280 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1281 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1282 Opr_Invalid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1283 Opr_Immediate, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1284 Opr_Reg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1285 Opr_Mem |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1286 } OperandClass; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1287 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1288 /* kill inlining if we reference a local? */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1289 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1290 /* DMD seems to allow only one 'symbol' per operand .. include __LOCAL_SIZE */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1291 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1292 /* DMD offset usage: <parm>[<reg>] seems to always be relative to EBP+8 .. even |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1293 if naked.. */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1294 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1295 // mov eax, 4 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1296 // mov eax, fs:4 |
871
e70a0e7e2260
Apply duane's patch for align power-of-two checking in inline asm. Fixes #159
Christian Kamm <kamm incasoftware de>
parents:
793
diff
changeset
|
1297 // -- have to assume we know whether or not to use '$' |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1298 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1299 static Token eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1300 static Expression * Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1301 static Identifier * ident_seg; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1302 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1303 struct AsmProcessor |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1304 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1305 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1306 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1307 int inBracket; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1308 int hasBracket; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1309 int hasNumber; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1310 int isOffset; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1311 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1312 Reg segmentPrefix; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1313 Reg reg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1314 sinteger_t constDisplacement; // use to build up.. should be int constant in the end.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1315 Array symbolDisplacement; // array of expressions or.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1316 Reg baseReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1317 Reg indexReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1318 int scale; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1319 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1320 OperandClass cls; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1321 PtrType dataSize; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1322 PtrType dataSizeHint; // DMD can use the type of a referenced variable |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1323 } Operand; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1324 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1325 static const unsigned Max_Operands = 3; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1326 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1327 AsmStatement * stmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1328 Scope * sc; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1329 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1330 Token * token; |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1331 std::ostringstream insnTemplate; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1332 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1333 AsmOp op; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1334 AsmOpInfo * opInfo; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1335 Operand operands[Max_Operands]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1336 Identifier * opIdent; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1337 Operand * operand; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1338 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1339 AsmProcessor ( Scope * sc, AsmStatement * stmt ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1340 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1341 this->sc = sc; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1342 this->stmt = stmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1343 token = stmt->tokens; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1344 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1345 opInfo = NULL; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1346 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1347 if ( ! regInfo[0].ident ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1348 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1349 char buf[8], *p; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1350 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1351 for ( int i = 0; i < N_Regs; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1352 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1353 strncpy ( buf, regInfo[i].name, sizeof ( buf ) - 1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1354 for ( p = buf; *p; p++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1355 *p = std::tolower ( *p ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1356 regInfo[i].gccName = std::string ( buf, p - buf ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1357 if ( ( i <= Reg_ST || i > Reg_ST7 ) && i != Reg_EFLAGS ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1358 regInfo[i].ident = Lexer::idPool ( regInfo[i].name ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1359 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1360 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1361 for ( int i = 0; i < N_PtrNames; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1362 ptrTypeIdentTable[i] = Lexer::idPool ( ptrTypeNameTable[i] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1363 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1364 Handled = new Expression ( 0, TOKvoid, sizeof ( Expression ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1365 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1366 ident_seg = Lexer::idPool ( "seg" ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1367 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1368 eof_tok.value = TOKeof; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1369 eof_tok.next = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1370 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1371 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1372 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1373 void run() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1374 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1375 parse(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1376 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1377 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1378 void nextToken() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1379 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1380 if ( token->next ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1381 token = token->next; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1382 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1383 token = & eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1384 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1385 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1386 Token * peekToken() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1387 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1388 if ( token->next ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1389 return token->next; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1390 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1391 return & eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1392 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1393 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1394 void expectEnd() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1395 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1396 if ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1397 stmt->error ( "expected end of statement" ); // %% extra at end... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1398 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1399 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1400 void parse() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1401 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1402 op = parseOpcode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1403 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1404 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1405 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1406 case Op_Align: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1407 doAlign(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1408 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1409 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1410 case Op_Even: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1411 doEven(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1412 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1413 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1414 case Op_Naked: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1415 doNaked(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1416 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1417 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1418 case Op_Invalid: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1419 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1420 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1421 if ( op >= Op_db && op <= Op_de ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1422 doData(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1423 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1424 doInstruction(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1425 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1426 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1427 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1428 AsmOp parseOpcode() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1429 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1430 static const int N_ents = sizeof ( opData ) /sizeof ( AsmOpEnt ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1431 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1432 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1433 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1434 case TOKalign: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1435 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1436 return Op_Align; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1437 case TOKin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1438 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1439 opIdent = Id::___in; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1440 return Op_in; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1441 case TOKint32: // "int" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1442 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1443 opIdent = Id::__int; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1444 return Op_SrcImm; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1445 case TOKout: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1446 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1447 opIdent = Id::___out; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1448 return Op_out; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1449 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1450 // search for mnemonic below |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1451 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1452 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1453 stmt->error ( "expected opcode" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1454 return Op_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1455 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1456 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1457 opIdent = token->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1458 const char * opcode = token->ident->string; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1459 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1460 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1461 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1462 // %% okay to use bsearch? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1463 int i = 0, j = N_ents, k, l; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1464 do |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1465 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1466 k = ( i + j ) / 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1467 l = strcmp ( opcode, opData[k].inMnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1468 if ( ! l ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1469 return opData[k].asmOp; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1470 else if ( l < 0 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1471 j = k; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1472 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1473 i = k + 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1474 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1475 while ( i != j ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1476 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1477 stmt->error ( "unknown opcode '%s'", opcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1478 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1479 return Op_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1480 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1481 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1482 // need clobber information.. use information is good too... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1483 void doInstruction() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1484 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1485 bool ok = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1486 unsigned operand_i = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1487 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1488 opInfo = & asmOpInfo[op]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1489 memset ( operands, 0, sizeof ( operands ) ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1490 |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1491 if ( token->value == TOKeof && ( op == Op_FMath0) ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1492 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1493 for ( operand_i = 0; operand_i < 1; operand_i++) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1494 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1495 operand = & operands[operand_i]; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1496 operand->reg = operand->baseReg = operand->indexReg = |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1497 operand->segmentPrefix = Reg_Invalid; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1498 |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1499 operand->cls = Opr_Reg; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1500 if ( operand_i == 0) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1501 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1502 operand->reg = Reg_ST; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1503 } |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1504 else |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1505 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1506 operand->reg = Reg_ST1; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1507 } |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1508 operand->hasNumber = 0; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1509 operand->constDisplacement = 0; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1510 parseOperand(); |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1511 |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1512 if ( matchOperands ( operand_i ) ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1513 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1514 AsmCode * asmcode = new AsmCode ( N_Regs ); |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1515 |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1516 if ( formatInstruction ( operand_i, asmcode ) ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1517 stmt->asmcode = ( code * ) asmcode; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1518 } |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1519 } |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1520 return; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1521 } |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1522 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1523 while ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1524 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1525 if ( operand_i < Max_Operands ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1526 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1527 operand = & operands[operand_i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1528 operand->reg = operand->baseReg = operand->indexReg = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1529 operand->segmentPrefix = Reg_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1530 parseOperand(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1531 operand_i++; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1532 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1533 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1534 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1535 ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1536 stmt->error ( "too many operands for instruction" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1537 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1538 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1539 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1540 if ( token->value == TOKcomma ) |
1078
9c63438c3207
Fix for asm { jle short Lret; }, used by Tango since dmd accepts the 'short'. We just
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1059
diff
changeset
|
1541 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1542 nextToken(); |
1078
9c63438c3207
Fix for asm { jle short Lret; }, used by Tango since dmd accepts the 'short'. We just
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1059
diff
changeset
|
1543 } |
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
|
1544 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
|
1545 { |
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
|
1546 //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
|
1547 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
|
1548 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
|
1549 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1550 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
|
1551 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1552 ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1553 stmt->error ( "expected comma after operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1554 return; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1555 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1556 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1557 // 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
|
1558 // ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1559 // 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
|
1560 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1561 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1562 if ( matchOperands ( operand_i ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1563 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1564 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
|
1565 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1566 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
|
1567 stmt->asmcode = ( code * ) asmcode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1568 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1569 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1570 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1571 void setAsmCode() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1572 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1573 AsmCode * asmcode = new AsmCode ( N_Regs ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1574 asmcode->insnTemplate = insnTemplate.str(); |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
1575 Logger::cout() << "insnTemplate = " << asmcode->insnTemplate << '\n'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1576 stmt->asmcode = ( code* ) asmcode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1577 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1578 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1579 // 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
|
1580 bool matchOperands ( unsigned nOperands ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1581 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1582 bool wrong_number = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1583 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1584 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
|
1585 classifyOperand ( & operands[i] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1586 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1587 while ( 1 ) |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1588 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1589 if ( nOperands == opInfo->nOperands() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1590 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1591 wrong_number = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1592 /* 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
|
1593 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
|
1594 Op_FCmpP/Op_FCmpP1 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1595 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
|
1596 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1597 Operand * operand = & operands[i]; |
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 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
|
1600 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1601 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
|
1602 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
|
1603 goto no_match; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1604 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1605 case OprC_RFP: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1606 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
|
1607 goto no_match; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1608 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1609 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1610 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1611 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1612 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1613 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1614 return true; |
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 no_match: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1617 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
|
1618 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
|
1619 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1620 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1621 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1622 if ( wrong_number ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1623 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
|
1624 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1625 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
|
1626 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1627 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1628 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1629 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
|
1630 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1631 if ( sc->func->naked ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1632 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1633 switch ( type ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1634 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1635 case Arg_Integer: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1636 if ( e->type->isunsigned() ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1637 insnTemplate << "$" << e->toUInteger(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1638 else |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1639 insnTemplate << "$" << e->toInteger(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1640 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1641 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1642 case Arg_Pointer: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1643 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
|
1644 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1645 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1646 case Arg_Memory: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1647 if ( e->op == TOKvar ) |
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 VarExp* v = ( VarExp* ) e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1650 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
|
1651 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1652 if ( !vd->isDataseg() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1653 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1654 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
|
1655 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1656 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1657 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1658 // 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
|
1659 if ( global.params.os == OSMacOSX ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1660 insnTemplate << "_"; |
944
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 // print out the mangle |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1663 insnTemplate << vd->mangle(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1664 vd->nakedUse = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1665 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1666 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1667 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1668 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
|
1669 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1670 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1671 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1672 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
|
1673 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1674 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1675 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1676 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1677 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1678 insnTemplate << fmt |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1679 << "<<" << (mode==Mode_Input ? "in" : "out") << asmcode->args.size() << ">>"; |
1101
8bf8b058944a
Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents:
1100
diff
changeset
|
1680 asmcode->args.push_back ( AsmArg ( type, e, mode ) ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1681 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1682 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1683 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
|
1684 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1685 assert ( !sc->func->naked ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1686 insnTemplate << fmtpre |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1687 << "<<" << (mode==Mode_Input ? "in" : "out") << ">>" |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1688 << fmtpost; |
1101
8bf8b058944a
Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents:
1100
diff
changeset
|
1689 asmcode->args.push_back ( AsmArg ( type, e, mode ) ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1690 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1691 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1692 void addLabel ( char* id ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1693 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1694 insnTemplate << sc->func->mangle() << "_" << id; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
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 /* 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
|
1698 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
|
1699 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
|
1700 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
|
1701 void classifyOperand ( Operand * operand ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1702 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1703 operand->cls = classifyOperand1 ( operand ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1704 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1705 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1706 OperandClass classifyOperand1 ( Operand * operand ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1707 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1708 bool is_localsize = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1709 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
|
1710 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1711 if ( operand->symbolDisplacement.dim ) |
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 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
|
1714 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
|
1715 } |
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 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
|
1718 return Opr_Immediate; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1719 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1720 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
|
1721 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1722 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
|
1723 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1724 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1725 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1726 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1727 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1728 return Opr_Mem; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1729 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1730 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1731 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
|
1732 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1733 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1734 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1735 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1736 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1737 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
|
1738 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1739 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
|
1740 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1741 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1742 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1743 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1744 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1745 return Opr_Mem; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1746 } |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1747 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1748 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
|
1749 return Opr_Reg; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1750 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1751 // 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
|
1752 // |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1753 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
|
1754 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1755 // 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
|
1756 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
|
1757 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1758 if ( operand->constDisplacement < 0x100 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1759 operand->dataSize = Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1760 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
|
1761 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
|
1762 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
|
1763 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
|
1764 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
|
1765 //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
|
1766 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
|
1767 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1768 return Opr_Immediate; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1769 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1770 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1771 // probably a bug,? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1772 stmt->error ( "invalid operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1773 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1774 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1775 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1776 void writeReg ( Reg reg ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1777 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1778 insnTemplate << "%" << regInfo[reg].gccName; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1779 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1780 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1781 bool opTakesLabel() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1782 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1783 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1784 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1785 case Op_Branch: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1786 case Op_CBranch: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1787 case Op_Loop: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1788 return true; |
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 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1793 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1794 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
|
1795 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1796 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
|
1797 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1798 case Byte_NoType: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1799 return ptrtype == Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1800 case Word_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1801 if ( ptrtype == Byte_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1802 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1803 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1804 case Int_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1805 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1806 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1807 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
|
1808 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
|
1809 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
|
1810 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
|
1811 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1812 // %% 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
|
1813 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1814 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1815 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1816 case FPInt_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1817 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1818 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1819 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
|
1820 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
|
1821 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
|
1822 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1823 return false; |
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 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1826 case FP_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1827 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1828 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1829 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
|
1830 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
|
1831 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
|
1832 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1833 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1834 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1835 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1836 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1837 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1838 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1839 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1840 } |
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
|
1841 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1842 // also set impl clobbers |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1843 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
|
1844 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1845 const char *fmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1846 const char *mnemonic; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1847 char type_char = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1848 bool use_star; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1849 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
|
1850 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1851 insnTemplate.str(""); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1852 // %% 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
|
1853 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
|
1854 mnemonic = alternateMnemonics[opInfo->link]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1855 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1856 mnemonic = opIdent->string; |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1857 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1858 if ( opInfo->needsType ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1859 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1860 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
|
1861 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
|
1862 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
|
1863 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1864 /* 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
|
1865 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
|
1866 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1867 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
|
1868 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
|
1869 case FPInt_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1870 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
|
1871 min_type = Int_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1872 else // compare, load, store |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1873 min_type = Short_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1874 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1875 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
|
1876 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1877 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
|
1878 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
|
1879 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1880 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
|
1881 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1882 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
|
1883 ! ( 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
|
1884 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
|
1885 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1886 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
|
1887 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
|
1888 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1889 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
|
1890 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1891 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
|
1892 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
|
1893 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1894 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1895 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1896 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
|
1897 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
|
1898 } |
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
|
1899 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1900 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1901 bool type_ok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1902 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
|
1903 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1904 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
|
1905 if ( ! type_ok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1906 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
|
1907 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1908 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1909 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
|
1910 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1911 if ( ! type_ok ) |
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 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
|
1914 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1915 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1916 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1917 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
|
1918 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1919 if ( operands[0].dataSize == Far_Ptr ) // %% type=Far_Ptr not set by Seg:Ofss OTOH, we don't support that.. |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1920 insnTemplate << 'l'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1921 } |
1085
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
1922 else if ( op == Op_fxch || op == Op_FfdRR_P || op == Op_FidR_P ) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1923 { |
1085
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
1924 if ( operands[0].cls == Opr_Mem && op == Op_FidR_P ) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1925 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1926 nOperands = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1927 } |
1085
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
1928 // gas won't accept the two-operand form |
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
1929 else if ( operands[1].cls == Opr_Reg && operands[1].reg == Reg_ST ) |
1083
c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1078
diff
changeset
|
1930 { |
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
|
1931 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
|
1932 } |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1933 else if ( operands[0].cls == Opr_Reg && (operands[0].reg == Reg_ST1 || operands[0].reg == Reg_ST )) |
1083
c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1078
diff
changeset
|
1934 { |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1935 //fix previous update to allow single operand form of fstp |
1083
c1e9f612e2e2
Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1078
diff
changeset
|
1936 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1937 else |
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 stmt->error ( "invalid operands" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1940 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1941 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1942 } |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1943 else if ( op == Op_FMath0 || op == Op_FdST0ST1 ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1944 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1945 operands[0].cls = Opr_Reg; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1946 operands[0].reg = Reg_ST; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1947 operands[1].cls = Opr_Reg; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1948 operands[1].reg = Reg_ST1; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1949 nOperands = 2; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1950 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1951 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1952 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1953 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1954 case Op_SizedStack: |
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 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1957 if ( mnemonic[mlen-1] == 'd' ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1958 insnTemplate.write(mnemonic, mlen-1); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1959 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1960 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1961 insnTemplate << mnemonic << 'w'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1962 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1963 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1964 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1965 case Op_cmpsd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1966 case Op_insX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1967 case Op_lodsX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1968 case Op_movsd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1969 case Op_outsX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1970 case Op_scasX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1971 case Op_stosX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1972 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1973 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1974 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
|
1975 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1976 insnTemplate.write(mnemonic, mlen-1) << 'l'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1977 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1978 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1979 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1980 insnTemplate << mnemonic; |
944
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 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1983 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1984 case Op_movsx: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1985 case Op_movzx: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1986 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1987 char tc_1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1988 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1989 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
|
1990 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
|
1991 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
|
1992 // 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
|
1993 switch ( op1_size ) |
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 case Byte_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1996 case Default_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1997 tc_1 = 'b'; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1998 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1999 case Short_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2000 tc_1 = 'w'; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2001 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2002 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2003 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
|
2004 return false; |
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 assert ( type_char != 0 ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2007 insnTemplate.write(mnemonic, mlen-1) << tc_1 << type_char; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2008 } |
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
|
2009 break; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2010 default: |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2011 insnTemplate << mnemonic; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2012 if ( type_char ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2013 insnTemplate << type_char; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2014 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2015 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2016 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2017 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
|
2018 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2019 case Clb_SizeAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2020 case Clb_EAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2021 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
|
2022 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2023 case Clb_SizeDXAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2024 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
|
2025 if ( type_char != 'b' ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2026 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
|
2027 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2028 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2029 // nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2030 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2031 } |
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 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
|
2034 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
|
2035 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
|
2036 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
|
2037 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
|
2038 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
|
2039 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
|
2040 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
|
2041 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
|
2042 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2043 /* 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
|
2044 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
|
2045 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
|
2046 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
|
2047 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
|
2048 asmcode->regs[Reg_ST] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2049 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
|
2050 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
|
2051 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
|
2052 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
|
2053 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
|
2054 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
|
2055 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
|
2056 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2057 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
|
2058 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
|
2059 if ( op == Op_cpuid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2060 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2061 asmcode->regs[Reg_EAX] = true; |
1095
d6bd818212de
Add missing EBX clobber to CPUID asm instruction.
Frits van Bommel <fvbommel wxs.nl>
parents:
1093
diff
changeset
|
2062 asmcode->regs[Reg_EBX] = true; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2063 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
|
2064 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
|
2065 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2066 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2067 insnTemplate << ' '; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2068 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
|
2069 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2070 int i; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2071 if ( i__ != 0 ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2072 insnTemplate << ", "; |
944
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 fmt = "$"; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2075 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2076 switch ( op ) |
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 case Op_mul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2079 // 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
|
2080 i__ = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2081 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2082 case Op_bound: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2083 case Op_enter: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2084 i = i__; |
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 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2087 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
|
2088 break; |
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 operand = & operands[ i ]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2091 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2092 switch ( operand->cls ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2093 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2094 case Opr_Immediate: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2095 // for implementing offset: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2096 // $var + $7 // fails |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2097 // $var + 7 // ok |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2098 // $7 + $var // ok |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2099 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2100 // 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
|
2101 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2102 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
|
2103 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
|
2104 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2105 if ( opTakesLabel() /*opInfo->takesLabel()*/ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2106 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2107 // "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
|
2108 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
|
2109 return false; |
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 ( operand->symbolDisplacement.dim && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2113 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
|
2114 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2115 // 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
|
2116 // 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
|
2117 addOperand ( "$", Arg_LocalSize, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2118 ( 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
|
2119 if ( operand->constDisplacement ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2120 insnTemplate << '+'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2121 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2122 break; |
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 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2125 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2126 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2127 fmt = "$a"; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2128 addOperand ( "$", Arg_Pointer, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2129 ( 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
|
2130 asmcode ); |
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 if ( operand->constDisplacement ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2133 insnTemplate << '+'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2134 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2135 // 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
|
2136 break; |
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 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
|
2139 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2140 case Opr_Reg: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2141 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
|
2142 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2143 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
|
2144 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
|
2145 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2146 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
|
2147 } |
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 ( opTakesLabel() /*opInfo->takesLabel()*/ ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2150 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2151 writeReg ( operand->reg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2152 /* |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2153 insnTemplate << "%"; |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2154 insnTemplate << regInfo[operand->reg].name; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2155 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2156 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2157 case Opr_Mem: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2158 // 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
|
2159 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
|
2160 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2161 mode = Mode_Update; |
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 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
|
2164 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2165 mode = Mode_Output; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2166 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2167 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2168 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2169 mode = Mode_Input; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2170 } |
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 use_star = opTakesLabel();//opInfo->takesLabel(); |
1093
cb868105a6b5
Change x64 asm in Cache.d from a positive offset from after rbp "-20(%rbp)+4" to before
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1091
diff
changeset
|
2173 |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2174 if (Logger::enabled()) { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2175 Logger::cout() << "Opr_Mem\n"; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2176 LOG_SCOPE |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2177 Logger::cout() << "baseReg: " << operand->baseReg << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2178 Logger::cout() << "segmentPrefix: " << operand->segmentPrefix << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2179 Logger::cout() << "constDisplacement: " << operand->constDisplacement << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2180 for (int i = 0; i < operand->symbolDisplacement.dim; i++) { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2181 Expression* expr = (Expression*) operand->symbolDisplacement.data[i]; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2182 Logger::cout() << "symbolDisplacement[" << i << "] = " << expr->toChars() << '\n'; |
1096
25d3aaf9e058
Fix FS:4 miswrite due to earlier changes for a constant displacement
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1095
diff
changeset
|
2183 } |
1093
cb868105a6b5
Change x64 asm in Cache.d from a positive offset from after rbp "-20(%rbp)+4" to before
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1091
diff
changeset
|
2184 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2185 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
|
2186 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2187 writeReg ( operand->segmentPrefix ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2188 insnTemplate << ':'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2189 } |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2190 if ( (operand->segmentPrefix != Reg_Invalid && operand->symbolDisplacement.dim == 0) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2191 || operand->constDisplacement ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2192 { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2193 insnTemplate << operand->constDisplacement; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2194 if ( operand->symbolDisplacement.dim ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2195 { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2196 insnTemplate << '+'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2197 } |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2198 operand->constDisplacement = 0; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2199 //addOperand(fmt, Arg_Integer, newIntExp(operand->constDisplacement), asmcode); |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2200 if ( opInfo->operands[i] & Opr_Dest ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2201 asmcode->clobbersMemory = 1; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2202 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2203 if ( operand->symbolDisplacement.dim ) |
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 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
|
2206 Declaration * decl = 0; |
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 if ( e->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2209 decl = ( ( VarExp * ) e )->var; |
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 ( operand->baseReg != Reg_Invalid && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2212 decl && ! decl->isDataseg() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2213 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2214 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2215 // 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
|
2216 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2217 /* 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
|
2218 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
|
2219 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2220 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
|
2221 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
|
2222 the stack offset. |
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 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2225 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
|
2226 decl->isVarDeclaration() && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2227 ( ( ( 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
|
2228 ( ( 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
|
2229 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2230 |
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
|
2231 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
|
2232 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
|
2233 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2234 #if !IN_LLVM |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2235 /* 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
|
2236 if ( sc->func->naked ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2237 operand->constDisplacement += 4; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2238 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2239 if ( operand->constDisplacement ) |
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 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
|
2242 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
|
2243 Type::tint64 ) ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2244 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
|
2245 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2246 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
|
2247 e->type = decl->type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2248 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2249 operand->constDisplacement = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2250 operand->baseReg = Reg_Invalid; |
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 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
|
2253 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2254 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2255 else |
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 // FIXME: what is this ? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2258 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
|
2259 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2260 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
|
2261 asmcode->clobbersMemory = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2262 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2263 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2264 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2265 // 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
|
2266 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2267 /* 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
|
2268 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
|
2269 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2270 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
|
2271 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
|
2272 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2273 if ( isDollar ( e ) ) |
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 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
|
2276 asmcode->dollarLabel = 1; |
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 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
|
2279 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2280 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
|
2281 stmt->isBranchToLabel = lbl->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2282 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2283 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2284 addLabel ( lbl->ident->toChars() ); |
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 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
|
2287 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2288 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2289 // 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
|
2290 // on osx, prepend extra _ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2291 if ( global.params.os == OSMacOSX ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2292 insnTemplate << "_"; |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2293 insnTemplate << decl->mangle(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2294 // 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
|
2295 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2296 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2297 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2298 if ( use_star ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2299 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2300 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2301 use_star = false; |
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 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2304 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
|
2305 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2306 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
|
2307 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
|
2308 e->type = tt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2309 } |
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 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
|
2312 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2313 } |
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 if ( use_star ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2316 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2317 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
|
2318 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2319 insnTemplate << '('; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2320 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
|
2321 writeReg ( operand->baseReg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2322 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
|
2323 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2324 insnTemplate << ','; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2325 writeReg ( operand->indexReg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2326 if ( operand->scale ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2327 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2328 insnTemplate << "," << operand->scale; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2329 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2330 } |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2331 insnTemplate << ')'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2332 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
|
2333 asmcode->clobbersMemory = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2334 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2335 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2336 case Opr_Invalid: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2337 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2338 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2339 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2340 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2341 asmcode->insnTemplate = insnTemplate.str(); |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2342 Logger::cout() << "insnTemplate = " << asmcode->insnTemplate << '\n'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2343 return true; |
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 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2346 bool isIntExp ( Expression * exp ) |
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 if ( exp->op == TOKint64 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2349 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2350 if ( exp->op == TOKvar ) |
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 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
|
2353 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
|
2354 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2355 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2356 return 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2357 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2358 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
|
2359 bool isLocalSize ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2360 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2361 // 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
|
2362 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
|
2363 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2364 bool isDollar ( Expression * exp ) |
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 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
|
2367 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2368 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2369 Expression * newRegExp ( int regno ) |
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 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
|
2372 e->op = TOKmod; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2373 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2374 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2375 |
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
|
2376 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
|
2377 { |
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
|
2378 // 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
|
2379 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
|
2380 } |
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 void slotExp ( Expression * exp ) |
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 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
|
2386 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2387 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
|
2388 if reg: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2389 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
|
2390 if in bracket: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2391 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
|
2392 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
|
2393 else, error |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2394 if symbol: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2395 set symbol field |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2396 */ |
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 bool is_offset = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2399 if ( exp->op == TOKaddress ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2400 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2401 exp = ( ( AddrExp * ) exp )->e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2402 is_offset = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2403 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2404 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2405 if ( isIntExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2406 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2407 if ( is_offset ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2408 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2409 operand->constDisplacement += exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2410 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2411 operand->hasNumber = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2412 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2413 else if ( isRegExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2414 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2415 if ( is_offset ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2416 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2417 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2418 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2419 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
|
2420 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
|
2421 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2422 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
|
2423 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2424 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2425 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2426 if ( operand->baseReg == Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2427 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
|
2428 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
|
2429 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2430 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
|
2431 operand->scale = 1; |
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 else |
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 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
|
2436 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2437 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2438 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2439 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
|
2440 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2441 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
|
2442 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2443 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
|
2444 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2445 operand->constDisplacement += v->offset; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2446 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2447 operand->hasNumber = 1; |
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 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2450 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2451 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
|
2452 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2453 // 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
|
2454 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
|
2455 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
|
2456 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
|
2457 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2458 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2459 if ( ! operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2460 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2461 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
|
2462 operand->isOffset = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2463 operand->symbolDisplacement.push ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2464 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2465 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2466 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2467 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
|
2468 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2469 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2470 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2471 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
|
2472 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2473 // %% 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
|
2474 // change to addSymbolDisp(e) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2475 if ( ! operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2476 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2477 operand->symbolDisplacement.push ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2478 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2479 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2480 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2481 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
|
2482 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2483 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2484 else if ( exp == Handled ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2485 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2486 // nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2487 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2488 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2489 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2490 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
|
2491 } |
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
|
2492 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2493 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2494 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
|
2495 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2496 // %% report operand number |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2497 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
|
2498 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2499 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2500 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
|
2501 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2502 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2503 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
|
2504 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2505 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2506 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2507 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2508 if ( e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2509 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
|
2510 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2511 e = e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2512 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2513 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2514 if ( e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2515 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
|
2516 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2517 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
|
2518 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2519 case TOKmul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2520 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
|
2521 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2522 case TOKdiv: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2523 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
|
2524 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2525 case TOKmod: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2526 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
|
2527 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2528 case TOKshl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2529 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
|
2530 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2531 case TOKshr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2532 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
|
2533 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2534 case TOKushr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2535 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
|
2536 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2537 case TOKnot: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2538 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
|
2539 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2540 case TOKtilde: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2541 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
|
2542 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2543 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2544 assert ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2545 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2546 e = e->semantic ( sc ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2547 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
|
2548 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2549 else |
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 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
|
2552 return newIntExp ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2553 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2554 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2555 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2556 void parseOperand() |
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 Expression * exp = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2559 slotExp ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2560 if ( isRegExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2561 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
|
2562 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2563 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2564 Expression * parseAsmExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2565 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2566 return parseShiftExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2567 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2568 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2569 Expression * parseShiftExp() |
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 Expression * e1 = parseAddExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2572 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2573 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2574 while ( 1 ) |
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 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2577 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2578 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2579 case TOKshl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2580 case TOKshr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2581 case TOKushr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2582 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2583 e2 = parseAddExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2584 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
|
2585 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2586 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2587 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2588 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2589 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2590 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2591 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2592 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2593 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2594 Expression * parseAddExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2595 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2596 Expression * e1 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2597 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2598 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2599 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2600 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2601 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2602 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2603 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2604 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2605 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2606 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2607 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
|
2608 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
|
2609 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2610 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2611 slotExp ( e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2612 slotExp ( e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2613 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2614 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2615 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2616 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2617 // 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
|
2618 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2619 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2620 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
|
2621 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
|
2622 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2623 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2624 slotExp ( e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2625 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
|
2626 slotExp ( e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2627 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2628 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2629 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2630 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2631 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2632 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2633 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2634 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2635 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2636 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2637 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2638 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
|
2639 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2640 Expression * et; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2641 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
|
2642 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2643 et = e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2644 e1 = e2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2645 e2 = et; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2646 goto do_scale; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2647 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2648 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
|
2649 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2650 do_scale: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2651 if ( ! operand->inBracket ) |
221
68687d8c3e9a
[svn r237] some inline asm output now seems to work, see tangotests/asm2.d
lindquist
parents:
220
diff
changeset
|
2652 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2653 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
|
2654 } |
222
251548c1035d
[svn r238] use *m for memory input constraints and pass in their address
ChristianK
parents:
221
diff
changeset
|
2655 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2656 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
|
2657 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2658 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2659 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2660 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2661 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2662 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
|
2663 operand->scale = e2->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2664 switch ( operand->scale ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2665 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2666 case 1: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2667 case 2: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2668 case 4: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2669 case 8: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2670 // ok; do nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2671 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2672 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2673 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
|
2674 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2675 } |
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 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2678 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2679 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2680 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2681 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2682 Expression * parseMultExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2683 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2684 Expression * e1 = parseBrExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2685 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2686 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2687 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2688 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2689 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2690 switch ( tv ) |
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 case TOKmul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2693 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2694 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2695 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
|
2696 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
|
2697 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
|
2698 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2699 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2700 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2701 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2702 case TOKdiv: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2703 case TOKmod: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2704 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2705 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2706 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
|
2707 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2708 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2709 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2710 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2711 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2712 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2713 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2714 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2715 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2716 Expression * parseBrExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2717 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2718 // %% 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
|
2719 // 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
|
2720 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2721 // 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
|
2722 // the spec'd syntax |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2723 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2724 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2725 if ( token->value == TOKlbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2726 e = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2727 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2728 e = parseUnaExp(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2729 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2730 // 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
|
2731 while ( token->value == TOKlbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2732 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2733 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2734 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2735 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
|
2736 slotExp ( parseAsmExp() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2737 operand->inBracket = 0; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2738 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2739 if ( token->value == TOKrbracket ) |
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 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2742 stmt->error ( "missing ']'" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2743 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2744 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2745 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2746 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2747 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2748 PtrType isPtrType ( Token * tok ) |
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 switch ( tok->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2751 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2752 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
|
2753 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
|
2754 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
|
2755 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
|
2756 // '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
|
2757 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
|
2758 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
|
2759 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
|
2760 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2761 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
|
2762 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
|
2763 return ptrTypeValueTable[i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2764 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2765 default: |
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 Default_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2769 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2770 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2771 Expression * parseUnaExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2772 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2773 Expression * e = NULL; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2774 PtrType ptr_type; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2775 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2776 // 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
|
2777 if ( token->value != TOKeof && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2778 peekToken()->value == TOKidentifier && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2779 peekToken()->ident == Id::ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2780 { |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2781 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2782 ptr_type = isPtrType ( token ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2783 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
|
2784 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2785 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
|
2786 operand->dataSize = ptr_type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2787 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2788 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
|
2789 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2790 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2791 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
|
2792 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2793 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2794 return parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2795 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2796 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2797 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2798 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2799 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2800 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2801 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
|
2802 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2803 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2804 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
|
2805 e = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2806 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2807 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
|
2808 token->ident == Id::offsetof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2809 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2810 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
|
2811 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
|
2812 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2813 e = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2814 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
|
2815 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2816 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2817 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2818 // primary exp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2819 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2820 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2821 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2822 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2823 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2824 case TOKnot: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2825 case TOKtilde: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2826 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2827 e = parseUnaExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2828 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
|
2829 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2830 // primary exp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2831 break; |
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 return parsePrimaryExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2834 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2835 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2836 Expression * parsePrimaryExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2837 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2838 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2839 Identifier * ident = NULL; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2840 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2841 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2842 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2843 case TOKint32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2844 case TOKuns32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2845 case TOKint64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2846 case TOKuns64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2847 // semantic here? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2848 // %% 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
|
2849 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
|
2850 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2851 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2852 case TOKfloat32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2853 case TOKfloat64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2854 case TOKfloat80v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2855 // %% need different types? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2856 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
|
2857 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2858 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2859 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2860 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2861 ident = token->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2862 nextToken(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2863 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2864 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
|
2865 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2866 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
|
2867 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2868 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
|
2869 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2870 do_dollar: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2871 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
|
2872 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2873 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2874 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2875 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
|
2876 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2877 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2878 // 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
|
2879 // 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
|
2880 // 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
|
2881 // 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
|
2882 // 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
|
2883 // %% 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
|
2884 while ( token->value == TOKdot ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2885 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2886 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2887 if ( token->value == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2888 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2889 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
|
2890 nextToken(); |
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 else |
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 stmt->error ( "expected identifier" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2895 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2896 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2897 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2898 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2899 // 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
|
2900 if ( e->op == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2901 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2902 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
|
2903 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2904 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
|
2905 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2906 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
|
2907 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2908 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2909 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2910 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2911 case TOKint32v: case TOKuns32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2912 case TOKint64v: case TOKuns64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2913 if ( token->uns64value < 8 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2914 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
|
2915 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2916 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2917 stmt->error ( "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
|
2918 e = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2919 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2920 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2921 if ( token->value == TOKrparen ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2922 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2923 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2924 stmt->error ( "expected ')'" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2925 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2926 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2927 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2928 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2929 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2930 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2931 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2932 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
|
2933 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2934 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2935 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
|
2936 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
|
2937 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
|
2938 operand->segmentPrefix = ( Reg ) i; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2939 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2940 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
|
2941 return parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2942 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2943 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2944 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2945 return newRegExp ( ( Reg ) i ); |
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 } |
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 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2950 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2951 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
|
2952 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2953 // 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
|
2954 // 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
|
2955 Dsymbol *scopesym; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2956 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2957 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
|
2958 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
|
2959 sc->func->searchLabel ( ident ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2960 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2961 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2962 e = e->semantic ( sc ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2963 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2964 // 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
|
2965 if ( e->op == TOKfloat64 ) |
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 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
|
2968 if ( sym ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2969 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2970 VarDeclaration *v = sym->isVarDeclaration(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2971 if ( v ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2972 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2973 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
|
2974 ve->type = e->type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2975 e = ve; |
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 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2978 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2979 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2980 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2981 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2982 case TOKdollar: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2983 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2984 ident = Id::__dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2985 goto do_dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2986 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
|
2987 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
|
2988 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
|
2989 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
|
2990 //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
|
2991 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
|
2992 break; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2993 default: |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
2994 if ( op == Op_FMath0 || op == Op_FdST0ST1 || op == Op_FMath ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
2995 return Handled; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2996 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2997 return Handled; |
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 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3000 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3001 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3002 void doAlign() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3003 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3004 // .align bits vs. bytes... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3005 // 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
|
3006 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3007 // 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
|
3008 // 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
|
3009 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
|
3010 uinteger_t align = e->toUInteger(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3011 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3012 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
|
3013 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3014 //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
|
3015 // 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
|
3016 #ifdef HAVE_GAS_BALIGN_AND_P2ALIGN |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3017 insnTemplate << ".balign\t" << align; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3018 #else |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3019 insnTemplate << ".align\t" << align; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3020 #endif |
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 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3024 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
|
3025 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3026 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3027 setAsmCode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3028 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3029 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3030 void doEven() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3031 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3032 // .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
|
3033 #ifdef HAVE_GAS_BALIGN_AND_P2ALIGN |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3034 insnTemplate << ".align\t2"; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3035 #else |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3036 insnTemplate << ".align\t2"; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3037 #endif |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3038 setAsmCode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3039 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3040 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3041 void doNaked() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3042 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3043 // %% 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
|
3044 sc->func->naked = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3045 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3046 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3047 void doData() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3048 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3049 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
|
3050 "", "", "" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3051 }; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3052 // FIXME |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3053 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3054 machine_mode mode; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3055 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3056 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
|
3057 insnTemplate->writebyte(' '); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3058 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3059 do { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3060 // 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
|
3061 switch (op) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3062 case Op_db: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3063 case Op_ds: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3064 case Op_di: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3065 case Op_dl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3066 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
|
3067 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
|
3068 // 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
|
3069 if (op != Op_dl) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3070 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
|
3071 else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3072 // 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
|
3073 // 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
|
3074 insnTemplate->printf("%u,%u", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3075 (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
|
3076 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3077 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3078 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
|
3079 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3080 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3081 case Op_df: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3082 mode = SFmode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3083 goto do_float; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3084 case Op_dd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3085 mode = DFmode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3086 goto do_float; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3087 case Op_de: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3088 #ifndef TARGET_80387 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3089 #define XFmode TFmode |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3090 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3091 mode = XFmode; // not TFmode |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3092 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3093 do_float: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3094 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
|
3095 token->value == TOKfloat80v) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3096 long words[3]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3097 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
|
3098 // 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
|
3099 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
|
3100 if (mode != SFmode) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3101 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
|
3102 // 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
|
3103 if (mode == XFmode) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3104 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
|
3105 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3106 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
|
3107 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3108 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3109 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3110 abort(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3111 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3112 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3113 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3114 if (token->value == TOKcomma) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3115 insnTemplate->writebyte(','); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3116 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3117 } 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
|
3118 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3119 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3120 stmt->error("expected comma"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3121 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3122 } while (1); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3123 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3124 setAsmCode();*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3125 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3126 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3127 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3128 #if D_GCC_VER < 40 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3129 // 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
|
3130 // be modified accordingly. |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3131 #undef XEXP |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3132 #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
|
3133 #endif |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3134 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3135 // FIXME |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3136 #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
|
3137 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
|
3138 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3139 assert ( 0 ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3140 // FIXME |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3141 // // 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
|
3142 // // 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
|
3143 // // 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
|
3144 // rtx r = DECL_INCOMING_RTL(decl); |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3145 // rtx e1, e2; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3146 // |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3147 // // Local variables don't have DECL_INCOMING_RTL |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3148 // 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
|
3149 // r = DECL_RTL(decl); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3150 // |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3151 // 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
|
3152 // r = XEXP(r, 0); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3153 // 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
|
3154 // e1 = XEXP(r, 0); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3155 // e2 = XEXP(r, 1); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3156 // 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
|
3157 // *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
|
3158 // return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3159 // } 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
|
3160 // *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
|
3161 // return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3162 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3163 // } 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
|
3164 // *result = 8; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3165 // 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
|
3166 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3167 // // 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
|
3168 // } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3169 // |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3170 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3171 } |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3172 |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3173 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3174 struct AsmParser : public AsmParserCommon |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3175 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3176 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
|
3177 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3178 AsmProcessor ap ( sc, asmst ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3179 ap.run(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3180 } |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3181 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3182 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
|
3183 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3184 return regInfo[i].gccName; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3185 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3186 }; |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3187 |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3188 } |