Mercurial > projects > ldc
annotate gen/asm-x86-64.h @ 1646:a8fc855f156e
Don't remove an old .o with -output-{bc,ll,s}.
author | Matti Niemenmaa <matti.niemenmaa+hg@iki.fi> |
---|---|
date | Tue, 09 Mar 2010 23:21:48 +0200 |
parents | 9cc791423e20 |
children |
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, |
1573
3a08f5e2553b
Fixed iretq problem reported by wilkie of the XomB project
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1563
diff
changeset
|
333 Op_iretq, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
334 Op_lods, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
335 Op_lodsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
336 Op_movs, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
337 Op_movsd, |
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_movsx, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
340 Op_movzx, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
341 Op_mul, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
342 Op_out, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
343 Op_outs, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
344 Op_outsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
345 Op_push, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
346 Op_ret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
347 Op_retf, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
348 Op_scas, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
349 Op_scasX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
350 Op_stos, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
351 Op_stosX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
352 Op_xlat, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
353 N_AsmOpInfo, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
354 Op_Align, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
355 Op_Even, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
356 Op_Naked, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
357 Op_db, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
358 Op_ds, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
359 Op_di, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
360 Op_dl, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
361 Op_df, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
362 Op_dd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
363 Op_de |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
364 } AsmOp; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
365 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
366 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
367 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
368 Opr_None = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
369 OprC_MRI = 1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
370 OprC_MR = 2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
371 OprC_Mem = 3, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
372 OprC_Reg = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
373 OprC_Imm = 5, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
374 OprC_SSE = 6, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
375 OprC_SSE_Mem = 7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
376 OprC_R32 = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
377 OprC_RWord = 9, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
378 OprC_RFP = 10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
379 OprC_AbsRel = 11, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
380 OprC_Relative = 12, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
381 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
|
382 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
|
383 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
|
384 OprC_MMX = 16, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
385 OprC_MMX_Mem = 17, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
386 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
|
387 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
388 Opr_ClassMask = 0x1f, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
389 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
390 Opr_Dest = 0x20, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
391 Opr_Update = 0x60, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
392 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
393 Opr_NoType = 0x80, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
394 } OprVals; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
395 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
396 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
397 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
398 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
399 } AsmOprInfo; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
400 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
401 typedef unsigned char Opr; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
402 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
403 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
404 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
405 Opr operands[3]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
406 unsigned char |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
407 needsType : 3, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
408 implicitClobbers : 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
409 linkType : 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
410 unsigned link; |
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 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
413 bool takesLabel() { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
414 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
|
415 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
416 */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
417 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
418 unsigned nOperands() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
419 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
420 if ( !operands[0] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
421 return 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
422 else if ( !operands[1] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
423 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
424 else if ( !operands[2] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
425 return 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
426 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
427 return 3; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
428 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
429 } AsmOpInfo; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
430 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
431 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
432 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
433 Mn_fdisi, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
434 Mn_feni, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
435 Mn_fsetpm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
436 Mn_iretw, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
437 Mn_iret, |
1573
3a08f5e2553b
Fixed iretq problem reported by wilkie of the XomB project
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1563
diff
changeset
|
438 Mn_iretq, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
439 Mn_lret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
440 Mn_cmpxchg8b, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
441 N_AltMn |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
442 } Alternate_Mnemonics; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
443 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
444 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
|
445 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
446 ".byte 0xdb, 0xe1", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
447 ".byte 0xdb, 0xe0", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
448 ".byte 0xdb, 0xe4", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
449 "iretw", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
450 "iret", |
1573
3a08f5e2553b
Fixed iretq problem reported by wilkie of the XomB project
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1563
diff
changeset
|
451 "iretq", |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
452 "lret", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
453 "cmpxchg8b" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
454 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
455 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
456 #define mri OprC_MRI |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
457 #define mr OprC_MR |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
458 #define mem OprC_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
459 // for now mfp=mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
460 #define mfp OprC_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
461 #define reg OprC_Reg |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
462 #define imm OprC_Imm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
463 #define sse OprC_SSE |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
464 #define ssem OprC_SSE_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
465 #define mmx OprC_MMX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
466 #define mmxm OprC_MMX_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
467 #define r32 OprC_R32 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
468 #define rw OprC_RWord |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
469 #define rfp OprC_RFP |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
470 #define port OprC_Port |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
471 #define ax OprC_AX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
472 #define dx OprC_DX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
473 #define shft OprC_Shift |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
474 #define D Opr_Dest |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
475 #define U Opr_Update |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
476 #define N Opr_NoType |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
477 //#define L Opr_Label |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
478 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
479 // 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
|
480 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
|
481 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
482 /* Op_Invalid */ {}, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
483 /* 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
|
484 /* 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
|
485 /* 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
|
486 /* 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
|
487 /* 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
|
488 /* 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
|
489 /* 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
|
490 /* 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
|
491 /* 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
|
492 /* 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
|
493 /* 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
|
494 /* 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
|
495 /* 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
|
496 /* 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
|
497 /* 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
|
498 /* 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
|
499 /* 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
|
500 /* 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
|
501 /* 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
|
502 /* 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
|
503 /* 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
|
504 /* 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
|
505 /* 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
|
506 /* 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
|
507 /* 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
|
508 /* 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
|
509 /* Op_SrcImm */ { imm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
510 /* 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
|
511 /* 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
|
512 /* 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
|
513 /* 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
|
514 /* 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
|
515 /* 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
|
516 /* 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
|
517 /* Op_SrcSrcMMX */ { mmx, mmx, 0, }, |
1540
a0114765fe34
Fixed Op_Shift asm instructions on x86-64.
Robert Clipsham <robert@octarineparrot.com>
parents:
1451
diff
changeset
|
518 /* Op_Shift */ { D|mr,N|shft, 0,/**/1, Clb_Flags }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
519 /* Op_Branch */ { mri }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
520 /* Op_CBranch */ { imm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
521 /* 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
|
522 /* 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
|
523 /* 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
|
524 /* 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
|
525 /* 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
|
526 /* 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
|
527 /* 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
|
528 /* 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
|
529 /* 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
|
530 /* 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
|
531 /* 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
|
532 /* 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
|
533 /* 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
|
534 /* 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
|
535 /* 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
|
536 /* 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
|
537 /* 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
|
538 /* 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
|
539 /* 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
|
540 /* 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
|
541 /* 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
|
542 /* 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
|
543 /* 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
|
544 /* 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
|
545 /* 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
|
546 /* 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
|
547 /* 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
|
548 /* 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
|
549 /* 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
|
550 /* 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
|
551 /* 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
|
552 /* 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
|
553 /* 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
|
554 /* 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
|
555 /* 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
|
556 /* 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
|
557 /* 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
|
558 /* 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
|
559 /* 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
|
560 /* 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
|
561 /* Op_bswap */ { D|r32 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
562 /* 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
|
563 /* 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
|
564 /* 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
|
565 /* 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
|
566 /* 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
|
567 /* 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
|
568 /* 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
|
569 /* 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
|
570 /* 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
|
571 /* 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
|
572 /* 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
|
573 /* 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
|
574 /* 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
|
575 /* 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
|
576 /* 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
|
577 /* 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
|
578 /* 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
|
579 /* 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
|
580 /* Op_iretd */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_iret }, |
1573
3a08f5e2553b
Fixed iretq problem reported by wilkie of the XomB project
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1563
diff
changeset
|
581 /* Op_iretq */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_iretq }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
582 /* 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
|
583 /* 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
|
584 /* 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
|
585 /* 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
|
586 /* 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
|
587 /* 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
|
588 /* 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
|
589 /* 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
|
590 /* 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
|
591 /* 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
|
592 /* 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
|
593 /* 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
|
594 /* 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
|
595 /* 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
|
596 /* 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
|
597 /* 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
|
598 /* 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
|
599 /* 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
|
600 /* 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
|
601 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
602 /// * 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
|
603 /// * 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
|
604 /// * 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
|
605 /// * 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
|
606 /// * 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
|
607 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
608 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
609 #undef mri |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
610 #undef mr |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
611 #undef mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
612 #undef mfp |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
613 #undef reg |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
614 #undef imm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
615 #undef sse |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
616 #undef ssem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
617 #undef mmx |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
618 #undef mmxm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
619 #undef r32 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
620 #undef rw |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
621 #undef rfp |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
622 #undef port |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
623 #undef ax |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
624 #undef dx |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
625 #undef shft |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
626 #undef D |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
627 #undef U |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
628 #undef N |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
629 //#undef L |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
630 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
631 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
632 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
633 const char * inMnemonic; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
634 AsmOp asmOp; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
635 } AsmOpEnt; |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
636 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
637 /* 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
|
638 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
639 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
|
640 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
641 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
|
642 */ |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
643 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
644 static AsmOpEnt opData[] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
645 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
646 { "adc", Op_UpdSrcF }, |
979
523bf4f166bc
Fix some assembler issues:
Frits van Bommel <fvbommel wxs.nl>
parents:
970
diff
changeset
|
647 { "add", Op_UpdSrcF }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
648 { "addpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
649 { "addps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
650 { "addq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
651 { "addsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
652 { "addss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
653 { "addsubpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
654 { "addsubps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
655 { "and", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
656 { "andnpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
657 { "andnps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
658 { "andpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
659 { "andps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
660 { "bsf", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
661 { "bsr", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
662 { "bswap", Op_bswap }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
663 { "bt", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
664 { "btc", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
665 { "btr", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
666 { "bts", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
667 { "call", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
668 { "callf", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
669 { "cbw", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
670 { "cdqe", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
671 { "clc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
672 { "cld", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
673 { "clflush",Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
674 { "cli", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
675 { "clts", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
676 { "cmc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
677 { "cmova", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
678 { "cmovae", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
679 { "cmovb", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
680 { "cmovbe", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
681 { "cmovc", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
682 { "cmove", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
683 { "cmovg", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
684 { "cmovge", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
685 { "cmovl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
686 { "cmovle", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
687 { "cmovna", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
688 { "cmovnae",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
689 { "cmovnb", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
690 { "cmovnbe",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
691 { "cmovnc", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
692 { "cmovne", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
693 { "cmovng", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
694 { "cmovnge",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
695 { "cmovnl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
696 { "cmovnle",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
697 { "cmovno", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
698 { "cmovnp", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
699 { "cmovns", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
700 { "cmovnz", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
701 { "cmovo", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
702 { "cmovp", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
703 { "cmovpe", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
704 { "cmovpo", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
705 { "cmovs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
706 { "cmovz", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
707 { "cmp", Op_SrcSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
708 { "cmppd", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
709 { "cmpps", Op_DstSrcImmS }, |
1016
16e2c750c857
Just forgot an opcode for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
979
diff
changeset
|
710 { "cmpq", Op_DstSrcNT }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
711 { "cmps", Op_cmps }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
712 { "cmpsb", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
713 { "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
|
714 { "cmpss", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
715 { "cmpsw", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
716 { "cmpsq", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
717 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
718 { "cdqe", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
719 { "cmpsq", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
720 { "cmpxch16b", Op_cmpxchg16b }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
721 { "cqo", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
722 { "lodsq", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
723 { "movsq", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
724 { "popfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
725 { "pushfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
726 { "scasq", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
727 { "stosq", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
728 { "iretq", Op_iretd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
729 { "swapgs", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
730 { "extrq", Op_Extrq }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
731 { "movsxq", Op_movsxq }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
732 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
733 { "clgi", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
734 { "invlpga", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
735 { "rdtscp", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
736 { "stgi", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
737 */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
738 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
739 { "cmpxch16b", Op_cmpxchg8b }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
740 { "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
|
741 { "cmpxchg", Op_cmpxchg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
742 { "comisd", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
743 { "comiss", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
744 { "cpuid", Op_cpuid }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
745 { "cvtdq2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
746 { "cvtdq2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
747 { "cvtpd2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
748 { "cvtpd2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
749 { "cvtpd2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
750 { "cvtpi2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
751 { "cvtpi2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
752 { "cvtps2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
753 { "cvtps2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
754 { "cvtps2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
755 { "cvtsd2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
756 { "cvtsd2ss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
757 { "cvtsi2sd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
758 { "cvtsi2ss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
759 { "cvtss2sd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
760 { "cvtss2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
761 { "cvttpd2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
762 { "cvttpd2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
763 { "cvttps2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
764 { "cvttps2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
765 { "cvttsd2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
766 { "cvttss2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
767 { "cwd", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
768 { "cwde", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
769 //{ "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
|
770 { "db", Op_db }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
771 { "dd", Op_dd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
772 { "de", Op_de }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
773 { "dec", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
774 { "df", Op_df }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
775 { "di", Op_di }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
776 { "div", Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
777 { "divpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
778 { "divps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
779 { "divsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
780 { "divss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
781 { "dl", Op_dl }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
782 { "dq", Op_dl }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
783 { "ds", Op_ds }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
784 { "dt", Op_de }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
785 { "dw", Op_ds }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
786 { "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
|
787 { "enter", Op_enter }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
788 { "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
|
789 { "fabs", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
790 { "fadd", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
791 { "faddp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
792 { "fbld", Op_Fs_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
793 { "fbstp", Op_Fd_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
794 { "fchs", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
795 { "fclex", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
796 { "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
|
797 { "fcmovbe", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
798 { "fcmove", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
799 { "fcmovnb", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
800 { "fcmovnbe", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
801 { "fcmovne", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
802 { "fcmovnu", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
803 { "fcmovu", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
804 { "fcom", Op_FCmp }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
805 { "fcomi", Op_FCmpFlg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
806 { "fcomip", Op_FCmpFlgP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
807 { "fcomp", Op_FCmpP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
808 { "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
|
809 { "fcos", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
810 { "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
|
811 { "fdisi", Op_fdisi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
812 { "fdiv", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
813 { "fdivp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
814 { "fdivr", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
815 { "fdivrp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
816 { "feni", Op_feni }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
817 { "ffree", Op_FdST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
818 { "fiadd", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
819 { "ficom", Op_Fis }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
820 { "ficomp", Op_Fis_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
821 { "fidiv", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
822 { "fidivr", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
823 { "fild", Op_Fis_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
824 { "fimul", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
825 { "fincstp",Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
826 { "finit", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
827 { "fist", Op_Fid }, // only 16,32bit |
1085
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
828 { "fistp", Op_Fid_P }, |
8cb5b746500c
Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1083
diff
changeset
|
829 { "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
|
830 { "fisub", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
831 { "fisubr", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
832 { "fld", Op_fld }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
833 { "fld1", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
834 { "fldcw", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
835 { "fldenv", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
836 { "fldl2e", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
837 { "fldl2t", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
838 { "fldlg2", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
839 { "fldln2", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
840 { "fldpi", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
841 { "fldz", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
842 { "fmul", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
843 { "fmulp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
844 { "fnclex", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
845 { "fndisi", Op_fdisi }, // ?? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
846 { "fneni", Op_feni }, // ?? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
847 { "fninit", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
848 { "fnop", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
849 { "fnsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
850 { "fnstcw", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
851 { "fnstenv",Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
852 { "fnstsw", Op_fXstsw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
853 { "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
|
854 { "fprem", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
855 { "fprem1", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
856 { "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
|
857 { "frndint",Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
858 { "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
|
859 { "fsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
860 { "fscale", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
861 { "fsetpm", Op_fsetpm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
862 { "fsin", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
863 { "fsincos",Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
864 { "fsqrt", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
865 { "fst", Op_Ffd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
866 { "fstcw", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
867 { "fstenv", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
868 { "fstp", Op_Ffd_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
869 { "fstsw", Op_fXstsw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
870 { "fsub", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
871 { "fsubp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
872 { "fsubr", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
873 { "fsubrp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
874 { "ftst", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
875 { "fucom", Op_FCmp }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
876 { "fucomi", Op_FCmpFlg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
877 { "fucomip",Op_FCmpFlgP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
878 { "fucomp", Op_FCmpP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
879 { "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
|
880 { "fwait", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
881 { "fxam", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
882 { "fxch", Op_fxch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
883 { "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
|
884 { "fxsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
885 { "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
|
886 { "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
|
887 { "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
|
888 { "haddpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
889 { "haddps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
890 { "hlt", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
891 { "hsubpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
892 { "hsubps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
893 { "idiv", Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
894 { "imul", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
895 { "in", Op_in }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
896 { "inc", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
897 { "ins", Op_ins }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
898 { "insb", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
899 { "insd", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
900 { "insw", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
901 { "int", Op_SrcImm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
902 { "into", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
903 { "invd", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
904 { "invlpg", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
905 { "iret", Op_iret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
906 { "iretd", Op_iretd }, |
1634
9cc791423e20
Fix typo for iretq
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1581
diff
changeset
|
907 { "iretq", Op_iretq }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
908 { "ja", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
909 { "jae", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
910 { "jb", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
911 { "jbe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
912 { "jc", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
913 { "jcxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
914 { "je", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
915 { "jecxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
916 { "jg", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
917 { "jge", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
918 { "jl", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
919 { "jle", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
920 { "jmp", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
921 { "jmpe", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
922 { "jmpf", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
923 { "jna", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
924 { "jnae", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
925 { "jnb", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
926 { "jnbe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
927 { "jnc", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
928 { "jne", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
929 { "jng", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
930 { "jnge", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
931 { "jnl", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
932 { "jnle", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
933 { "jno", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
934 { "jnp", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
935 { "jns", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
936 { "jnz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
937 { "jo", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
938 { "jp", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
939 { "jpe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
940 { "jpo", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
941 { "jrcxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
942 { "js", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
943 { "jz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
944 { "lahf", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
945 { "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
|
946 { "lddqu", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
947 { "ldmxcsr", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
948 { "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
|
949 { "lea", Op_DstSrc }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
950 { "leaq", Op_DstSrcSSE }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
951 { "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
|
952 { "lfence",Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
953 { "lfs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
954 { "lgdt", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
955 { "lgs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
956 { "lidt", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
957 { "lldt", Op_SrcRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
958 { "lmsw", Op_SrcRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
959 { "lock", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
960 { "lods", Op_lods }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
961 { "lodsb", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
962 { "lodsd", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
963 { "lodsw", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
964 { "lodsq", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
965 { "loop", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
966 { "loope", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
967 { "loopne",Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
968 { "loopnz",Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
969 { "loopz", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
970 { "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
|
971 { "lss", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
972 { "ltr", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
973 { "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
|
974 { "maskmovq", Op_SrcSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
975 { "maxpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
976 { "maxps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
977 { "maxsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
978 { "maxss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
979 { "mfence",Op_0}, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
980 { "minpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
981 { "minps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
982 { "minsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
983 { "minss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
984 { "monitor", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
985 { "mov", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
986 { "movapd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
987 { "movaps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
988 { "movb", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
989 { "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
|
990 { "movddup", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
991 { "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
|
992 { "movdqa", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
993 { "movdqu", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
994 { "movhlps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
995 { "movhpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
996 { "movhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
997 { "movl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
998 { "movlhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
999 { "movlpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1000 { "movlps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1001 { "movmskpd",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1002 { "movmskps",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1003 { "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
|
1004 { "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
|
1005 { "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
|
1006 { "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
|
1007 { "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
|
1008 { "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
|
1009 { "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
|
1010 { "movs", Op_movs }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1011 { "movsb", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1012 { "movsd", Op_movsd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1013 { "movsq", Op_movsd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1014 { "movshdup", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1015 { "movsldup", Op_DstSrcSSE }, |
970
fb31a4afa2df
Revert wilsonk's "fix" for the callingconv1.d problem.
Frits van Bommel <fvbommel wxs.nl>
parents:
966
diff
changeset
|
1016 { "movss", Op_DstSrcSSE }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1017 { "movsw", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1018 { "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
|
1019 { "movsxd", Op_movsx }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1020 { "movupd",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1021 { "movups",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1022 { "movzbl", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1023 { "movzx", Op_movzx }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1024 { "mul", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1025 { "mulpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1026 { "mulps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1027 { "mulsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1028 { "mulss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1029 { "mwait", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1030 { "naked", Op_Naked }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1031 { "neg", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1032 { "nop", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1033 { "not", Op_Upd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1034 { "or", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1035 { "orpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1036 { "orps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1037 { "out", Op_out }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1038 { "outs", Op_outs }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1039 { "outsb", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1040 { "outsd", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1041 { "outsw", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1042 { "pabsb", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1043 { "pabsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1044 { "pabsq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1045 { "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
|
1046 { "packsswb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1047 { "packuswb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1048 { "paddb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1049 { "paddd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1050 { "paddq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1051 { "paddsb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1052 { "paddsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1053 { "paddusb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1054 { "paddusw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1055 { "paddw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1056 { "palignr", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1057 { "pand", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1058 { "pandn", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1059 { "pause", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1060 { "pavgb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1061 { "pavgw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1062 { "pcmpeqb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1063 { "pcmpeqd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1064 { "pcmpeqw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1065 { "pcmpgtb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1066 { "pcmpgtd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1067 { "pcmpgtw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1068 { "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
|
1069 { "phaddd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1070 { "phaddsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1071 { "phaddw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1072 { "phsubd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1073 { "phsubsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1074 { "phsubw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1075 { "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
|
1076 { "pmaddubsw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1077 { "pmaddwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1078 { "pmaxsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1079 { "pmaxub", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1080 { "pminsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1081 { "pminub", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1082 { "pmovmskb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1083 { "pmulhrsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1084 { "pmulhuw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1085 { "pmulhw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1086 { "pmullw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1087 { "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
|
1088 { "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
|
1089 { "popfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1090 { "popq", Op_push }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1091 { "por", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1092 { "prefetchnta", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1093 { "prefetcht0", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1094 { "prefetcht1", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1095 { "prefetcht2", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1096 { "psadbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1097 { "pshufb", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1098 { "pshufd", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1099 { "pshufhw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1100 { "pshuflw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1101 { "pshufw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1102 { "psignb", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1103 { "psignd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1104 { "psignw", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1105 { "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
|
1106 { "pslldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1107 { "psllq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1108 { "psllw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1109 { "psrad", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1110 { "psraw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1111 { "psrld", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1112 { "psrldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1113 { "psrlq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1114 { "psrlw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1115 { "psubb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1116 { "psubd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1117 { "psubq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1118 { "psubsb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1119 { "psubsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1120 { "psubusb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1121 { "psubusw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1122 { "psubw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1123 { "punpckhbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1124 { "punpckhdq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1125 { "punpckhqdq",Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1126 { "punpckhwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1127 { "punpcklbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1128 { "punpckldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1129 { "punpcklqdq",Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1130 { "punpcklwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1131 { "pushf", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1132 { "pushfq", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1133 { "pushq", Op_push }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1134 { "pxor", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1135 { "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
|
1136 { "rcpps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1137 { "rcpss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1138 { "rcr", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1139 { "rdmsr", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1140 { "rdpmc", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1141 { "rdtsc", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1142 { "rep", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1143 { "repe", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1144 { "repne", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1145 { "repnz", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1146 { "repz", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1147 { "ret", Op_ret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1148 { "retf", Op_retf }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1149 { "retn", Op_retf }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1150 { "rol", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1151 { "ror", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1152 { "rsm", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1153 { "rsqrtps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1154 { "rsqrtss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1155 { "sahf", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1156 { "sal", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1157 { "salq", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1158 { "sar", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1159 { "sbb", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1160 { "scas", Op_scas }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1161 { "scasb", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1162 { "scasd", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1163 { "scasw", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1164 { "scasq", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1165 { "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
|
1166 { "setae", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1167 { "setb", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1168 { "setbe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1169 { "setc", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1170 { "sete", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1171 { "setg", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1172 { "setge", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1173 { "setl", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1174 { "setle", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1175 { "setna", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1176 { "setnae", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1177 { "setnb", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1178 { "setnbe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1179 { "setnc", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1180 { "setne", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1181 { "setng", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1182 { "setnge", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1183 { "setnl", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1184 { "setnle", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1185 { "setno", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1186 { "setnp", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1187 { "setns", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1188 { "setnz", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1189 { "seto", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1190 { "setp", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1191 { "setpe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1192 { "setpo", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1193 { "sets", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1194 { "setz", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1195 { "sfence", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1196 { "sgdt", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1197 { "shl", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1198 { "shld", Op_UpdSrcShft }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1199 { "shr", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1200 { "shrd", Op_UpdSrcShft }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1201 { "shufpd", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1202 { "shufps", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1203 { "sidt", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1204 { "sldt", Op_DstRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1205 { "smsw", Op_DstRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1206 { "sqrtpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1207 { "sqrtps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1208 { "sqrtsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1209 { "sqrtss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1210 { "stc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1211 { "std", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1212 { "sti", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1213 { "stmxcsr",Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1214 { "stos", Op_stos }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1215 { "stosb", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1216 { "stosd", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1217 { "stosw", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1218 { "stosq", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1219 { "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
|
1220 { "sub", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1221 { "subpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1222 { "subps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1223 { "subq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1224 { "subsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1225 { "subss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1226 { "swapgs", Op_DstSrcSSE }, |
1451
297d1e2f6441
Add `syscall` to the x86-64 asm parser, and both `syscall` and `sysret` to the
Frits van Bommel <fvbommel wxs.nl>
parents:
1398
diff
changeset
|
1227 { "syscall", Op_0 }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1228 { "sysenter",Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1229 { "sysexit", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1230 { "sysret", Op_0 }, |
1581
f4421c81398f
Fixed ticket #365. Thanks wilkie.
Robert Clipsham <robert@octarineparrot.com>
parents:
1573
diff
changeset
|
1231 { "sysretq", Op_0 }, |
1398
f3d7451cfa5b
remove extra 'test' instructions and fix 'test' properly
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1397
diff
changeset
|
1232 { "test", Op_SrcSrcF }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1233 { "ucomisd", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1234 { "ucomiss", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1235 { "ud2", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1236 { "unpckhpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1237 { "unpckhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1238 { "unpcklpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1239 { "unpcklps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1240 { "verr", Op_SrcMemNTF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1241 { "verw", Op_SrcMemNTF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1242 { "wbinvd", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1243 { "wrmsr", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1244 { "xadd", Op_UpdUpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1245 { "xchg", Op_UpdUpd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1246 { "xlat", Op_xlat }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1247 { "xlatb", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1248 { "xor", Op_DstSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1249 { "xorpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1250 { "xorps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1251 { "xorq", Op_DstSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1252 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1253 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1254 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1255 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1256 Default_Ptr = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1257 Byte_Ptr = 1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1258 Short_Ptr = 2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1259 Int_Ptr = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1260 QWord_Ptr = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1261 Float_Ptr = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1262 Double_Ptr = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1263 Extended_Ptr = 10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1264 Near_Ptr = 98, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1265 Far_Ptr = 99, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1266 N_PtrTypes |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1267 } PtrType; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1268 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1269 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
|
1270 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
|
1271 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1272 "word", "dword", "qword", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1273 "float", "double", "extended", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1274 "near", "far" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1275 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1276 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1277 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
|
1278 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
|
1279 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1280 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
|
1281 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
|
1282 Near_Ptr, Far_Ptr |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1283 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1284 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1285 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1286 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1287 Opr_Invalid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1288 Opr_Immediate, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1289 Opr_Reg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1290 Opr_Mem |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1291 } OperandClass; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1292 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1293 /* kill inlining if we reference a local? */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1294 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1295 /* 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
|
1296 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1297 /* 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
|
1298 if naked.. */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1299 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1300 // mov eax, 4 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1301 // 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
|
1302 // -- 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
|
1303 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1304 static Token eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1305 static Expression * Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1306 static Identifier * ident_seg; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1307 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1308 struct AsmProcessor |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1309 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1310 typedef struct |
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 int inBracket; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1313 int hasBracket; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1314 int hasNumber; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1315 int isOffset; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1316 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1317 Reg segmentPrefix; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1318 Reg reg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1319 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
|
1320 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
|
1321 Reg baseReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1322 Reg indexReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1323 int scale; |
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 OperandClass cls; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1326 PtrType dataSize; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1327 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
|
1328 } Operand; |
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 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
|
1331 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1332 AsmStatement * stmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1333 Scope * sc; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1334 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1335 Token * token; |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1336 std::ostringstream insnTemplate; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1337 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1338 AsmOp op; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1339 AsmOpInfo * opInfo; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1340 Operand operands[Max_Operands]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1341 Identifier * opIdent; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1342 Operand * operand; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1343 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1344 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
|
1345 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1346 this->sc = sc; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1347 this->stmt = stmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1348 token = stmt->tokens; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1349 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1350 opInfo = NULL; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1351 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1352 if ( ! regInfo[0].ident ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1353 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1354 char buf[8], *p; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1355 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1356 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
|
1357 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1358 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
|
1359 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
|
1360 *p = std::tolower ( *p ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1361 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
|
1362 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
|
1363 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
|
1364 } |
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 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
|
1367 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
|
1368 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1369 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
|
1370 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1371 ident_seg = Lexer::idPool ( "seg" ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1372 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1373 eof_tok.value = TOKeof; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1374 eof_tok.next = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1375 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1376 } |
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 run() |
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 parse(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1381 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1382 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1383 void nextToken() |
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 if ( token->next ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1386 token = token->next; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1387 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1388 token = & eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1389 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1390 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1391 Token * peekToken() |
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 if ( token->next ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1394 return token->next; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1395 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1396 return & eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1397 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1398 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1399 void expectEnd() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1400 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1401 if ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1402 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
|
1403 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1404 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1405 void parse() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1406 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1407 op = parseOpcode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1408 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1409 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1410 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1411 case Op_Align: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1412 doAlign(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1413 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1414 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1415 case Op_Even: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1416 doEven(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1417 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1418 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1419 case Op_Naked: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1420 doNaked(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1421 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1422 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1423 case Op_Invalid: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1424 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1425 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1426 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
|
1427 doData(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1428 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1429 doInstruction(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1430 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1431 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1432 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1433 AsmOp parseOpcode() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1434 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1435 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
|
1436 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1437 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1438 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1439 case TOKalign: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1440 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1441 return Op_Align; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1442 case TOKin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1443 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1444 opIdent = Id::___in; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1445 return Op_in; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1446 case TOKint32: // "int" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1447 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1448 opIdent = Id::__int; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1449 return Op_SrcImm; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1450 case TOKout: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1451 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1452 opIdent = Id::___out; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1453 return Op_out; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1454 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1455 // search for mnemonic below |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1456 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1457 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1458 stmt->error ( "expected opcode" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1459 return Op_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1460 } |
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 opIdent = token->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1463 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
|
1464 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1465 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1466 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1467 // %% okay to use bsearch? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1468 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
|
1469 do |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1470 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1471 k = ( i + j ) / 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1472 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
|
1473 if ( ! l ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1474 return opData[k].asmOp; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1475 else if ( l < 0 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1476 j = k; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1477 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1478 i = k + 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1479 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1480 while ( i != j ); |
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 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
|
1483 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1484 return Op_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1485 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1486 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1487 // 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
|
1488 void doInstruction() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1489 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1490 bool ok = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1491 unsigned operand_i = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1492 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1493 opInfo = & asmOpInfo[op]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1494 memset ( operands, 0, sizeof ( operands ) ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1495 |
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
|
1496 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
|
1497 { |
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 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
|
1499 { |
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 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
|
1501 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
|
1502 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
|
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 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
|
1505 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
|
1506 { |
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 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
|
1508 } |
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 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
|
1510 { |
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 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
|
1512 } |
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 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
|
1514 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
|
1515 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
|
1516 |
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 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
|
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 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
|
1520 |
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 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
|
1522 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
|
1523 } |
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
|
1524 } |
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
|
1525 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
|
1526 } |
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
|
1527 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1528 while ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1529 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1530 if ( operand_i < Max_Operands ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1531 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1532 operand = & operands[operand_i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1533 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
|
1534 operand->segmentPrefix = Reg_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1535 parseOperand(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1536 operand_i++; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1537 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1538 else |
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 ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1541 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
|
1542 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1543 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1544 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1545 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
|
1546 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1547 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
|
1548 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1549 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
|
1550 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1551 ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1552 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
|
1553 return; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1554 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1555 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1556 // if (operand_i < opInfo->minOperands) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1557 // ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1558 // 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
|
1559 // } |
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 if ( matchOperands ( operand_i ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1562 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1563 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
|
1564 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1565 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
|
1566 stmt->asmcode = ( code * ) asmcode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1567 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1568 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1569 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1570 void setAsmCode() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1571 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1572 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
|
1573 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
|
1574 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
|
1575 stmt->asmcode = ( code* ) asmcode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1576 } |
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 // 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
|
1579 bool matchOperands ( unsigned nOperands ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1580 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1581 bool wrong_number = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1582 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1583 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
|
1584 classifyOperand ( & operands[i] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1585 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1586 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
|
1587 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1588 if ( nOperands == opInfo->nOperands() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1589 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1590 wrong_number = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1591 /* 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
|
1592 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
|
1593 Op_FCmpP/Op_FCmpP1 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1594 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
|
1595 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1596 Operand * operand = & operands[i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1597 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1598 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
|
1599 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1600 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
|
1601 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
|
1602 goto no_match; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1603 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1604 case OprC_RFP: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1605 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
|
1606 goto no_match; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1607 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1608 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1609 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1610 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1611 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1612 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1613 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1614 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1615 no_match: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1616 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
|
1617 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
|
1618 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1619 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1620 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1621 if ( wrong_number ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1622 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
|
1623 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1624 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
|
1625 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1626 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1627 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1628 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
|
1629 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1630 if ( sc->func->naked ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1631 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1632 switch ( type ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1633 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1634 case Arg_Integer: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1635 if ( e->type->isunsigned() ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1636 insnTemplate << "$" << e->toUInteger(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1637 else |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1638 insnTemplate << "$" << e->toInteger(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1639 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1640 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1641 case Arg_Pointer: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1642 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
|
1643 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1644 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1645 case Arg_Memory: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1646 if ( e->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1647 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1648 VarExp* v = ( VarExp* ) e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1649 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
|
1650 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1651 if ( !vd->isDataseg() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1652 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1653 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
|
1654 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1655 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1656 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1657 // osx needs an extra underscore |
1190
ea7b8b6c96c0
Some more fixups for mingw -- missing underscores
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1109
diff
changeset
|
1658 if ( global.params.os == OSMacOSX || global.params.os == OSWindows ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1659 insnTemplate << "_"; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1660 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1661 // print out the mangle |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1662 insnTemplate << vd->mangle(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1663 vd->nakedUse = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1664 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1665 } |
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 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
|
1668 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1669 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1670 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1671 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
|
1672 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1673 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1674 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1675 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1676 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1677 insnTemplate << fmt |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1678 << "<<" << (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
|
1679 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
|
1680 } |
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 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
|
1683 { |
1563
b0a691de8cc7
Fixed bug #349 , now emits error.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
1540
diff
changeset
|
1684 if ( sc->func->naked ) |
b0a691de8cc7
Fixed bug #349 , now emits error.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
1540
diff
changeset
|
1685 { |
b0a691de8cc7
Fixed bug #349 , now emits error.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
1540
diff
changeset
|
1686 // taken from above |
b0a691de8cc7
Fixed bug #349 , now emits error.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
1540
diff
changeset
|
1687 stmt->error ( "only global variables can be referenced by identifier in naked asm" ); |
b0a691de8cc7
Fixed bug #349 , now emits error.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
1540
diff
changeset
|
1688 return; |
b0a691de8cc7
Fixed bug #349 , now emits error.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
1540
diff
changeset
|
1689 } |
b0a691de8cc7
Fixed bug #349 , now emits error.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents:
1540
diff
changeset
|
1690 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1691 insnTemplate << fmtpre |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1692 << "<<" << (mode==Mode_Input ? "in" : "out") << ">>" |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1693 << fmtpost; |
1101
8bf8b058944a
Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents:
1100
diff
changeset
|
1694 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
|
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 void addLabel ( char* id ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1698 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1699 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
|
1700 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1701 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1702 /* 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
|
1703 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
|
1704 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
|
1705 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
|
1706 void classifyOperand ( 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 operand->cls = classifyOperand1 ( operand ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1709 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1710 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1711 OperandClass classifyOperand1 ( Operand * operand ) |
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 bool is_localsize = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1714 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
|
1715 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1716 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1717 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1718 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
|
1719 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
|
1720 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1721 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1722 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
|
1723 return Opr_Immediate; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1724 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1725 if ( operand->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
|
1726 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1727 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
|
1728 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1729 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1730 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1731 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1732 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1733 return Opr_Mem; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1734 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1735 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1736 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
|
1737 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1738 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1739 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1740 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1741 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1742 if ( operand->segmentPrefix != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1743 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1744 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
|
1745 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1746 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1747 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1748 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1749 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1750 return Opr_Mem; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1751 } |
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
|
1752 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1753 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
|
1754 return Opr_Reg; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1755 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1756 // 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
|
1757 // |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1758 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
|
1759 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1760 // 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
|
1761 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
|
1762 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1763 if ( operand->constDisplacement < 0x100 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1764 operand->dataSize = Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1765 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
|
1766 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
|
1767 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
|
1768 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
|
1769 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
|
1770 //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
|
1771 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
|
1772 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1773 return Opr_Immediate; |
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 // probably a bug,? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1777 stmt->error ( "invalid operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1778 return Opr_Invalid; |
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 void writeReg ( Reg reg ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1782 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1783 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
|
1784 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1785 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1786 bool opTakesLabel() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1787 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1788 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1789 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1790 case Op_Branch: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1791 case Op_CBranch: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1792 case Op_Loop: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1793 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1794 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1795 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1796 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1797 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1798 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1799 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
|
1800 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1801 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
|
1802 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1803 case Byte_NoType: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1804 return ptrtype == Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1805 case Word_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1806 if ( ptrtype == Byte_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1807 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1808 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1809 case Int_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1810 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1811 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1812 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
|
1813 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
|
1814 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
|
1815 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
|
1816 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1817 // %% 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
|
1818 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1819 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1820 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1821 case FPInt_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1822 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1823 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1824 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
|
1825 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
|
1826 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
|
1827 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1828 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1829 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1830 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1831 case FP_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1832 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1833 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1834 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
|
1835 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
|
1836 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
|
1837 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1838 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1839 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1840 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1841 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1842 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1843 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1844 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1845 } |
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
|
1846 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1847 // also set impl clobbers |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1848 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
|
1849 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1850 const char *fmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1851 const char *mnemonic; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1852 char type_char = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1853 bool use_star; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1854 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
|
1855 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1856 insnTemplate.str(""); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1857 // %% 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
|
1858 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
|
1859 mnemonic = alternateMnemonics[opInfo->link]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1860 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1861 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
|
1862 |
1320
1ad5a58b5c9d
Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents:
1310
diff
changeset
|
1863 // handle two-operand form where second arg is ignored. |
1ad5a58b5c9d
Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents:
1310
diff
changeset
|
1864 // must be done before type_char detection |
1ad5a58b5c9d
Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents:
1310
diff
changeset
|
1865 if ( op == Op_FidR_P || op == Op_fxch || op == Op_FfdRR_P ) |
1ad5a58b5c9d
Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents:
1310
diff
changeset
|
1866 { |
1ad5a58b5c9d
Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents:
1310
diff
changeset
|
1867 if (operands[1].cls == Opr_Reg && operands[1].reg == Reg_ST ) |
1ad5a58b5c9d
Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents:
1310
diff
changeset
|
1868 nOperands = 1; |
1ad5a58b5c9d
Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents:
1310
diff
changeset
|
1869 else |
1ad5a58b5c9d
Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents:
1310
diff
changeset
|
1870 stmt->error("instruction allows only ST as second argument"); |
1ad5a58b5c9d
Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents:
1310
diff
changeset
|
1871 } |
1ad5a58b5c9d
Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents:
1310
diff
changeset
|
1872 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1873 if ( opInfo->needsType ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1874 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1875 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
|
1876 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
|
1877 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
|
1878 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1879 /* 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
|
1880 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
|
1881 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1882 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
|
1883 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
|
1884 case FPInt_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1885 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
|
1886 min_type = Int_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1887 else // compare, load, store |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1888 min_type = Short_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1889 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1890 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
|
1891 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1892 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
|
1893 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
|
1894 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1895 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
|
1896 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1897 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
|
1898 ! ( 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
|
1899 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
|
1900 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1901 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
|
1902 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
|
1903 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1904 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
|
1905 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1906 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
|
1907 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
|
1908 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1909 else |
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 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
|
1912 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
|
1913 } |
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
|
1914 } |
944
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 bool type_ok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1917 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
|
1918 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1919 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
|
1920 if ( ! type_ok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1921 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
|
1922 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1923 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1924 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
|
1925 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1926 if ( ! type_ok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1927 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1928 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
|
1929 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1930 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1931 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1932 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
|
1933 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1934 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
|
1935 insnTemplate << 'l'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1936 } |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1937 else if ( op == Op_FMath0 || op == Op_FdST0ST1 ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1938 { |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1939 operands[0].cls = Opr_Reg; |
1301
1e30cc395d2e
fix wrong arg order for fmul/fadd
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1190
diff
changeset
|
1940 operands[0].reg = Reg_ST1; |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1941 operands[1].cls = Opr_Reg; |
1301
1e30cc395d2e
fix wrong arg order for fmul/fadd
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1190
diff
changeset
|
1942 operands[1].reg = Reg_ST; |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1943 nOperands = 2; |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
1944 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1945 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1946 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1947 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1948 case Op_SizedStack: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1949 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1950 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1951 if ( mnemonic[mlen-1] == 'd' ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1952 insnTemplate.write(mnemonic, mlen-1); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1953 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1954 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1955 insnTemplate << mnemonic << 'w'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1956 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1957 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1958 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1959 case Op_cmpsd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1960 case Op_insX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1961 case Op_lodsX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1962 case Op_movsd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1963 case Op_outsX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1964 case Op_scasX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1965 case Op_stosX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1966 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1967 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1968 if ( mnemonic[mlen-1] == 'd' ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1969 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1970 insnTemplate.write(mnemonic, mlen-1) << 'l'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1971 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1972 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1973 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1974 insnTemplate << mnemonic; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1975 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1976 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1977 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1978 case Op_movsx: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1979 case Op_movzx: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1980 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1981 char tc_1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1982 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1983 PtrType op1_size = operands[1].dataSize; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1984 if ( op1_size == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1985 op1_size = operands[1].dataSizeHint; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1986 // Need type char for source arg |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1987 switch ( op1_size ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1988 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1989 case Byte_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1990 case Default_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1991 tc_1 = 'b'; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1992 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1993 case Short_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1994 tc_1 = 'w'; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1995 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1996 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1997 stmt->error ( "invalid operand size/type" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1998 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
1999 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2000 assert ( type_char != 0 ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2001 insnTemplate.write(mnemonic, mlen-1) << tc_1 << type_char; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2002 } |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2003 break; |
1303
c250e03d8a5b
Make the no-operand versions of floating point inline asm instructions always
Christian Kamm <kamm incasoftware de>
parents:
1302
diff
changeset
|
2004 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2005 default: |
1302
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2006 // special case fdiv, fsub: see dmd 840, ldc 256 |
1310
85b80c4fe48a
Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents:
1304
diff
changeset
|
2007 if ((strncmp(mnemonic, "fsub", 4) == 0 || |
85b80c4fe48a
Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents:
1304
diff
changeset
|
2008 strncmp(mnemonic, "fdiv", 4) == 0) && |
1325
5a9dc345c70a
Yet another fdiv/fsub special case.
Christian Kamm <kamm incasoftware de>
parents:
1320
diff
changeset
|
2009 operands[0].reg != Reg_ST && op != Op_FMath) |
1302
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2010 { |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2011 // replace: |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2012 // f{sub,div}r{p,} <-> f{sub,div}{p,} |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2013 if (mnemonic[4] == 'r') |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2014 { |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2015 insnTemplate.write(mnemonic, 4); |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2016 insnTemplate.write(mnemonic+5, strlen(mnemonic)-5); |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2017 } |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2018 else |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2019 { |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2020 insnTemplate.write(mnemonic, 4) << "r"; |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2021 insnTemplate.write(mnemonic+4, strlen(mnemonic)-4); |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2022 } |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2023 } |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2024 else |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2025 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2026 insnTemplate << mnemonic; |
1302
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2027 } |
1310
85b80c4fe48a
Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents:
1304
diff
changeset
|
2028 // the no-operand versions of floating point ops always pop |
85b80c4fe48a
Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents:
1304
diff
changeset
|
2029 if (op == Op_FMath0) |
85b80c4fe48a
Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents:
1304
diff
changeset
|
2030 insnTemplate << "p"; |
1302
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2031 if ( type_char ) |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2032 insnTemplate << type_char; |
a26b99b7e293
Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents:
1301
diff
changeset
|
2033 break; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2034 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2035 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2036 switch ( opInfo->implicitClobbers & Clb_DXAX_Mask ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2037 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2038 case Clb_SizeAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2039 case Clb_EAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2040 asmcode->regs[Reg_EAX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2041 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2042 case Clb_SizeDXAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2043 asmcode->regs[Reg_EAX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2044 if ( type_char != 'b' ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2045 asmcode->regs[Reg_EDX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2046 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2047 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2048 // nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2049 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2050 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2051 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2052 if ( opInfo->implicitClobbers & Clb_DI ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2053 asmcode->regs[Reg_EDI] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2054 if ( opInfo->implicitClobbers & Clb_SI ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2055 asmcode->regs[Reg_ESI] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2056 if ( opInfo->implicitClobbers & Clb_CX ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2057 asmcode->regs[Reg_ECX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2058 if ( opInfo->implicitClobbers & Clb_SP ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2059 asmcode->regs[Reg_ESP] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2060 if ( opInfo->implicitClobbers & Clb_ST ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2061 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2062 /* Can't figure out how to tell GCC that an |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2063 asm statement leaves an arg pushed on the stack. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2064 Maybe if the statment had and input or output |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2065 operand it would work... In any case, clobbering |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2066 all FP prevents incorrect code generation. */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2067 asmcode->regs[Reg_ST] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2068 asmcode->regs[Reg_ST1] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2069 asmcode->regs[Reg_ST2] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2070 asmcode->regs[Reg_ST3] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2071 asmcode->regs[Reg_ST4] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2072 asmcode->regs[Reg_ST5] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2073 asmcode->regs[Reg_ST6] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2074 asmcode->regs[Reg_ST7] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2075 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2076 if ( opInfo->implicitClobbers & Clb_Flags ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2077 asmcode->regs[Reg_EFLAGS] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2078 if ( op == Op_cpuid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2079 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2080 asmcode->regs[Reg_EAX] = true; |
1095
d6bd818212de
Add missing EBX clobber to CPUID asm instruction.
Frits van Bommel <fvbommel wxs.nl>
parents:
1093
diff
changeset
|
2081 asmcode->regs[Reg_EBX] = true; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2082 asmcode->regs[Reg_ECX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2083 asmcode->regs[Reg_EDX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2084 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2085 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2086 insnTemplate << ' '; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2087 for ( int i__ = 0; i__ < nOperands; i__++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2088 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2089 int i; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2090 if ( i__ != 0 ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2091 insnTemplate << ", "; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2092 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2093 fmt = "$"; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2094 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2095 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2096 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2097 case Op_mul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2098 // gas won't accept the two-operand form; skip to the source operand |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2099 i__ = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2100 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2101 case Op_bound: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2102 case Op_enter: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2103 i = i__; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2104 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2105 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2106 i = nOperands - 1 - i__; // operand = & operands[ nOperands - 1 - i ]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2107 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2108 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2109 operand = & operands[ i ]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2110 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2111 switch ( operand->cls ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2112 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2113 case Opr_Immediate: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2114 // for implementing offset: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2115 // $var + $7 // fails |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2116 // $var + 7 // ok |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2117 // $7 + $var // ok |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2118 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2119 // DMD doesn't seem to allow this |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2120 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2121 if (opInfo->takesLabel()) tho... (near ptr <Number> would be abs?) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2122 fmt = "$a"; // GAS won't accept "jmp $42"; must be "jmp 42" (rel) or "jmp *42" (abs) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2123 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2124 if ( opTakesLabel() /*opInfo->takesLabel()*/ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2125 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2126 // "relative addressing not allowed in branch instructions" .. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2127 stmt->error ( "integer constant not allowed in branch instructions" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2128 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2129 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2130 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2131 if ( operand->symbolDisplacement.dim && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2132 isLocalSize ( ( Expression * ) operand->symbolDisplacement.data[0] ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2133 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2134 // handle __LOCAL_SIZE, which in this constant, is an immediate |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2135 // should do this in slotexp.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2136 addOperand ( "$", Arg_LocalSize, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2137 ( Expression * ) operand->symbolDisplacement.data[0], asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2138 if ( operand->constDisplacement ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2139 insnTemplate << '+'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2140 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2141 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2142 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2143 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2144 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2145 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2146 fmt = "$a"; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2147 addOperand ( "$", Arg_Pointer, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2148 ( Expression * ) operand->symbolDisplacement.data[0], |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2149 asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2150 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2151 if ( operand->constDisplacement ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2152 insnTemplate << '+'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2153 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2154 // skip the addOperand(fmt, Arg_Integer...) below |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2155 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2156 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2157 addOperand ( fmt, Arg_Integer, newIntExp ( operand->constDisplacement ), asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2158 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2159 case Opr_Reg: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2160 if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2161 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2162 Reg clbr_reg = ( Reg ) regInfo[operand->reg].baseReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2163 if ( clbr_reg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2164 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2165 asmcode->regs[clbr_reg] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2166 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2167 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2168 if ( opTakesLabel() /*opInfo->takesLabel()*/ ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2169 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2170 writeReg ( operand->reg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2171 /* |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2172 insnTemplate << "%"; |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2173 insnTemplate << regInfo[operand->reg].name; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2174 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2175 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2176 case Opr_Mem: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2177 // better: use output operands for simple variable references |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2178 if ( ( opInfo->operands[i] & Opr_Update ) == Opr_Update ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2179 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2180 mode = Mode_Update; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2181 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2182 else if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2183 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2184 mode = Mode_Output; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2185 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2186 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2187 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2188 mode = Mode_Input; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2189 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2190 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2191 use_star = opTakesLabel();//opInfo->takesLabel(); |
1093
cb868105a6b5
Change x64 asm in Cache.d from a positive offset from after rbp "-20(%rbp)+4" to before
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1091
diff
changeset
|
2192 |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2193 if (Logger::enabled()) { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2194 Logger::cout() << "Opr_Mem\n"; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2195 LOG_SCOPE |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2196 Logger::cout() << "baseReg: " << operand->baseReg << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2197 Logger::cout() << "segmentPrefix: " << operand->segmentPrefix << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2198 Logger::cout() << "constDisplacement: " << operand->constDisplacement << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2199 for (int i = 0; i < operand->symbolDisplacement.dim; i++) { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2200 Expression* expr = (Expression*) operand->symbolDisplacement.data[i]; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2201 Logger::cout() << "symbolDisplacement[" << i << "] = " << expr->toChars() << '\n'; |
1096
25d3aaf9e058
Fix FS:4 miswrite due to earlier changes for a constant displacement
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1095
diff
changeset
|
2202 } |
1093
cb868105a6b5
Change x64 asm in Cache.d from a positive offset from after rbp "-20(%rbp)+4" to before
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1091
diff
changeset
|
2203 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2204 if ( operand->segmentPrefix != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2205 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2206 writeReg ( operand->segmentPrefix ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2207 insnTemplate << ':'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2208 } |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2209 if ( (operand->segmentPrefix != Reg_Invalid && operand->symbolDisplacement.dim == 0) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2210 || operand->constDisplacement ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2211 { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2212 insnTemplate << operand->constDisplacement; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2213 if ( operand->symbolDisplacement.dim ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2214 { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2215 insnTemplate << '+'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2216 } |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2217 operand->constDisplacement = 0; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2218 //addOperand(fmt, Arg_Integer, newIntExp(operand->constDisplacement), asmcode); |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2219 if ( opInfo->operands[i] & Opr_Dest ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2220 asmcode->clobbersMemory = 1; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2221 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2222 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2223 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2224 Expression * e = ( Expression * ) operand->symbolDisplacement.data[0]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2225 Declaration * decl = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2226 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2227 if ( e->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2228 decl = ( ( VarExp * ) e )->var; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2229 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2230 if ( operand->baseReg != Reg_Invalid && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2231 decl && ! decl->isDataseg() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2232 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2233 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2234 // Use the offset from frame pointer |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2235 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2236 /* GCC doesn't give the front end access to stack offsets |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2237 when optimization is turned on (3.x) or at all (4.x). |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2238 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2239 Try to convert var[EBP] (or var[ESP] for naked funcs) to |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2240 a memory expression that does not require us to know |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2241 the stack offset. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2242 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2243 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2244 if ( operand->indexReg == Reg_Invalid && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2245 decl->isVarDeclaration() && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2246 ( ( ( operand->baseReg == Reg_EBP || ( operand->baseReg == Reg_RBP ) ) && ! sc->func->naked ) || |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2247 ( ( operand->baseReg == Reg_ESP || ( operand->baseReg == Reg_RSP ) ) && ! sc->func->naked ) ) ) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2248 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2249 |
1053
11e28922ac76
Always pass an address expression (not a var expression) to asm operands of
Frits van Bommel <fvbommel wxs.nl>
parents:
1016
diff
changeset
|
2250 e = new AddrExp ( 0, e ); |
11e28922ac76
Always pass an address expression (not a var expression) to asm operands of
Frits van Bommel <fvbommel wxs.nl>
parents:
1016
diff
changeset
|
2251 e->type = decl->type->pointerTo(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2252 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2253 #if !IN_LLVM |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2254 /* DMD uses the same frame offsets for naked functions. */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2255 if ( sc->func->naked ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2256 operand->constDisplacement += 4; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2257 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2258 if ( operand->constDisplacement ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2259 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2260 e = new AddExp ( 0, e, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2261 new IntegerExp ( 0, operand->constDisplacement, |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2262 Type::tint64 ) ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2263 e->type = decl->type->pointerTo(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2264 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2265 e = new PtrExp ( 0, e ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2266 e->type = decl->type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2267 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2268 operand->constDisplacement = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2269 operand->baseReg = Reg_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2270 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2271 addOperand ( fmt, Arg_Memory, e, asmcode, mode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2272 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2273 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2274 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2275 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2276 // FIXME: what is this ? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2277 addOperand2 ( "${",":a}", Arg_FrameRelative, e, asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2278 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2279 if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2280 asmcode->clobbersMemory = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2281 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2282 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2283 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2284 // Plain memory reference to variable |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2285 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2286 /* If in a reg, DMD moves to memory.. even with -O, so we'll do the same |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2287 by always using the "m" contraint. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2288 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2289 In order to get the correct output for function and label symbols, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2290 the %an format must be used with the "p" constraint. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2291 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2292 if ( isDollar ( e ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2293 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2294 error ( "dollar labels are not supported", stmt->loc.toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2295 asmcode->dollarLabel = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2296 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2297 else if ( e->op == TOKdsymbol ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2298 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2299 LabelDsymbol * lbl = ( LabelDsymbol * ) ( ( DsymbolExp * ) e )->s; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2300 stmt->isBranchToLabel = lbl->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2301 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2302 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2303 addLabel ( lbl->ident->toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2304 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2305 else if ( ( decl && decl->isCodeseg() ) ) // if function or label |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2306 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2307 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2308 // simply write out the mangle |
1190
ea7b8b6c96c0
Some more fixups for mingw -- missing underscores
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1109
diff
changeset
|
2309 // on osx and windows, prepend extra _ |
ea7b8b6c96c0
Some more fixups for mingw -- missing underscores
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1109
diff
changeset
|
2310 if ( global.params.os == OSMacOSX || global.params.os == OSWindows ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2311 insnTemplate << "_"; |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2312 insnTemplate << decl->mangle(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2313 // addOperand2("${", ":c}", Arg_Pointer, e, asmcode); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2314 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2315 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2316 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2317 if ( use_star ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2318 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2319 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2320 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2321 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2322 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2323 if ( !sc->func->naked ) // no addrexp in naked asm please :) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2324 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2325 Type* tt = e->type->pointerTo(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2326 e = new AddrExp ( 0, e ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2327 e->type = tt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2328 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2329 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2330 addOperand ( fmt, Arg_Memory, e, asmcode, mode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2331 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2332 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2333 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2334 if ( use_star ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2335 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2336 if ( operand->baseReg != Reg_Invalid || operand->indexReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2337 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2338 insnTemplate << '('; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2339 if ( operand->baseReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2340 writeReg ( operand->baseReg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2341 if ( operand->indexReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2342 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2343 insnTemplate << ','; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2344 writeReg ( operand->indexReg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2345 if ( operand->scale ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2346 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2347 insnTemplate << "," << operand->scale; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2348 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2349 } |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2350 insnTemplate << ')'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2351 if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2352 asmcode->clobbersMemory = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2353 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2354 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2355 case Opr_Invalid: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2356 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2357 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2358 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2359 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2360 asmcode->insnTemplate = insnTemplate.str(); |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1108
diff
changeset
|
2361 Logger::cout() << "insnTemplate = " << asmcode->insnTemplate << '\n'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2362 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2363 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2364 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2365 bool isIntExp ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2366 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2367 if ( exp->op == TOKint64 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2368 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2369 if ( exp->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2370 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2371 Declaration * v = ( ( VarExp * ) exp )->var; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2372 if ( v->isConst() && v->type->isintegral() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2373 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2374 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2375 return 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2376 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2377 bool isRegExp ( Expression * exp ) { return exp->op == TOKmod; } // ewww.%% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2378 bool isLocalSize ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2379 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2380 // cleanup: make a static var |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2381 return exp->op == TOKidentifier && ( ( IdentifierExp * ) exp )->ident == Id::__LOCAL_SIZE; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2382 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2383 bool isDollar ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2384 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2385 return exp->op == TOKidentifier && ( ( IdentifierExp * ) exp )->ident == Id::__dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2386 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2387 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2388 Expression * newRegExp ( int regno ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2389 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2390 IntegerExp * e = new IntegerExp ( regno ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2391 e->op = TOKmod; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2392 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2393 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2394 |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2395 Expression * newIntExp ( long v /* %% type */ ) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2396 { |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2397 // Handle 64 bit ... incoming long may need to be 'long long' for Windows??? |
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2398 return new IntegerExp ( stmt->loc, v, Type::tint64 ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2399 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2400 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2401 void slotExp ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2402 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2403 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2404 if offset, make a note |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2405 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2406 if integer, add to immediate |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2407 if reg: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2408 if not in bracket, set reg (else error) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2409 if in bracket: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2410 if not base, set base |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2411 if not index, set index |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2412 else, error |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2413 if symbol: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2414 set symbol field |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2415 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2416 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2417 bool is_offset = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2418 if ( exp->op == TOKaddress ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2419 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2420 exp = ( ( AddrExp * ) exp )->e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2421 is_offset = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2422 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2423 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2424 if ( isIntExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2425 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2426 if ( is_offset ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2427 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2428 operand->constDisplacement += exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2429 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2430 operand->hasNumber = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2431 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2432 else if ( isRegExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2433 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2434 if ( is_offset ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2435 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2436 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2437 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2438 if ( operand->reg == Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2439 operand->reg = ( Reg ) exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2440 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2441 stmt->error ( "too many registers in operand (use brackets)" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2442 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2443 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2444 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2445 if ( operand->baseReg == Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2446 operand->baseReg = ( Reg ) exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2447 else if ( operand->indexReg == Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2448 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2449 operand->indexReg = ( Reg ) exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2450 operand->scale = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2451 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2452 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2453 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2454 stmt->error ( "too many registers memory operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2455 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2456 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2457 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2458 else if ( exp->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2459 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2460 VarDeclaration * v = ( ( VarExp * ) exp )->var->isVarDeclaration(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2461 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2462 if ( v && v->storage_class & STCfield ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2463 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2464 operand->constDisplacement += v->offset; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2465 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2466 operand->hasNumber = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2467 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2468 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2469 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2470 if ( v && v->type->isscalar() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2471 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2472 // DMD doesn't check Tcomplex*, and counts Tcomplex32 as Tfloat64 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2473 TY ty = v->type->toBasetype()->ty; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2474 operand->dataSizeHint = ty == Tfloat80 || ty == Timaginary80 ? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2475 Extended_Ptr : ( PtrType ) v->type->size ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2476 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2477 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2478 if ( ! operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2479 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2480 if ( is_offset && ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2481 operand->isOffset = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2482 operand->symbolDisplacement.push ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2483 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2484 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2485 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2486 stmt->error ( "too many symbols in operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2487 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2488 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2489 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2490 else if ( exp->op == TOKidentifier || exp->op == TOKdsymbol ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2491 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2492 // %% localsize could be treated as a simple constant.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2493 // change to addSymbolDisp(e) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2494 if ( ! operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2495 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2496 operand->symbolDisplacement.push ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2497 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2498 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2499 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2500 stmt->error ( "too many symbols in operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2501 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2502 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2503 else if ( exp == Handled ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2504 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2505 // nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2506 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2507 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2508 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2509 stmt->error ( "invalid operand" ); |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2510 } |
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2511 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2512 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2513 void invalidExpression() |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2514 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2515 // %% report operand number |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2516 stmt->error ( "invalid expression" ); |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2517 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2518 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2519 Expression * intOp ( TOK op, Expression * e1, Expression * e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2520 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2521 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2522 if ( isIntExp ( e1 ) && ( ! e2 || isIntExp ( e2 ) ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2523 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2524 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2525 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2526 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2527 if ( e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2528 e = new AddExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2529 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2530 e = e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2531 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2532 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2533 if ( e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2534 e = new MinExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2535 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2536 e = new NegExp ( stmt->loc, e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2537 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2538 case TOKmul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2539 e = new MulExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2540 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2541 case TOKdiv: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2542 e = new DivExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2543 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2544 case TOKmod: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2545 e = new ModExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2546 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2547 case TOKshl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2548 e = new ShlExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2549 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2550 case TOKshr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2551 e = new ShrExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2552 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2553 case TOKushr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2554 e = new UshrExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2555 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2556 case TOKnot: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2557 e = new NotExp ( stmt->loc, e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2558 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2559 case TOKtilde: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2560 e = new ComExp ( stmt->loc, e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2561 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2562 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2563 assert ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2564 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2565 e = e->semantic ( sc ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2566 return e->optimize ( WANTvalue | WANTinterpret ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2567 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2568 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2569 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2570 stmt->error ( "expected integer operand(s) for '%s'", Token::tochars[op] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2571 return newIntExp ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2572 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2573 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2574 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2575 void parseOperand() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2576 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2577 Expression * exp = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2578 slotExp ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2579 if ( isRegExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2580 operand->dataSize = ( PtrType ) regInfo[exp->toInteger() ].size; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2581 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2582 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2583 Expression * parseAsmExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2584 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2585 return parseShiftExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2586 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2587 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2588 Expression * parseShiftExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2589 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2590 Expression * e1 = parseAddExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2591 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2592 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2593 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2594 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2595 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2596 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2597 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2598 case TOKshl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2599 case TOKshr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2600 case TOKushr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2601 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2602 e2 = parseAddExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2603 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2604 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2605 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2606 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2607 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2608 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2609 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2610 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2611 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2612 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2613 Expression * parseAddExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2614 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2615 Expression * e1 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2616 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2617 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2618 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2619 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2620 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2621 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2622 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2623 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2624 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2625 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2626 if ( isIntExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2627 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2628 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2629 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2630 slotExp ( e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2631 slotExp ( e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2632 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2633 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2634 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2635 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2636 // Note: no support for symbol address difference |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2637 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2638 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2639 if ( isIntExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2640 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2641 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2642 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2643 slotExp ( e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2644 e2 = intOp ( TOKmin, e2, NULL ); // verifies e2 is an int |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2645 slotExp ( e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2646 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2647 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2648 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2649 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2650 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2651 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2652 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2653 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2654 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2655 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2656 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2657 bool tryScale ( Expression * e1, Expression * e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2658 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2659 Expression * et; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2660 if ( isIntExp ( e1 ) && isRegExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2661 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2662 et = e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2663 e1 = e2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2664 e2 = et; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2665 goto do_scale; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2666 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2667 else if ( isRegExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2668 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2669 do_scale: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2670 if ( ! operand->inBracket ) |
221
68687d8c3e9a
[svn r237] some inline asm output now seems to work, see tangotests/asm2.d
lindquist
parents:
220
diff
changeset
|
2671 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2672 invalidExpression(); // maybe should allow, e.g. DS:EBX+EAX*4 |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
2673 } |
222
251548c1035d
[svn r238] use *m for memory input constraints and pass in their address
ChristianK
parents:
221
diff
changeset
|
2674 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2675 if ( operand->scale || operand->indexReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2676 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2677 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2678 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2679 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2680 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2681 operand->indexReg = ( Reg ) e1->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2682 operand->scale = e2->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2683 switch ( operand->scale ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2684 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2685 case 1: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2686 case 2: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2687 case 4: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2688 case 8: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2689 // ok; do nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2690 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2691 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2692 stmt->error ( "invalid index register scale '%d'", operand->scale ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2693 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2694 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2695 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2696 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2697 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2698 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2699 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2700 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2701 Expression * parseMultExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2702 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2703 Expression * e1 = parseBrExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2704 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2705 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2706 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2707 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2708 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2709 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2710 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2711 case TOKmul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2712 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2713 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2714 if ( isIntExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2715 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2716 else if ( tryScale ( e1,e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2717 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2718 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2719 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2720 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2721 case TOKdiv: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2722 case TOKmod: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2723 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2724 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2725 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2726 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2727 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2728 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2729 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2730 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2731 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2732 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2733 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2734 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2735 Expression * parseBrExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2736 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2737 // %% check (why is bracket lower precends..) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2738 // 3+4[eax] -> 3 + (4 [EAX]) .. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2739 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2740 // only one bracked allowed, so this doesn't quite handle |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2741 // the spec'd syntax |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2742 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2743 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2744 if ( token->value == TOKlbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2745 e = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2746 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2747 e = parseUnaExp(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2748 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2749 // DMD allows multiple bracket expressions. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2750 while ( token->value == TOKlbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2751 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2752 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2753 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2754 operand->inBracket = operand->hasBracket = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2755 slotExp ( parseAsmExp() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2756 operand->inBracket = 0; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2757 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2758 if ( token->value == TOKrbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2759 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2760 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2761 stmt->error ( "missing ']'" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2762 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2763 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2764 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2765 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2766 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2767 PtrType isPtrType ( Token * tok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2768 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2769 switch ( tok->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2770 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2771 case TOKint8: return Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2772 case TOKint16: return Short_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2773 case TOKint32: return Int_Ptr; |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2774 case TOKint64: return QWord_Ptr; |
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2775 // 'long ptr' isn't accepted? (it is now for x64 - qword) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2776 case TOKfloat32: return Float_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2777 case TOKfloat64: return Double_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2778 case TOKfloat80: return Extended_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2779 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2780 for ( int i = 0; i < N_PtrNames; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2781 if ( tok->ident == ptrTypeIdentTable[i] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2782 return ptrTypeValueTable[i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2783 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2784 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2785 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2786 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2787 return Default_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2788 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2789 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2790 Expression * parseUnaExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2791 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2792 Expression * e = NULL; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2793 PtrType ptr_type; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2794 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2795 // First, check for type prefix. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2796 if ( token->value != TOKeof && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2797 peekToken()->value == TOKidentifier && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2798 peekToken()->ident == Id::ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2799 { |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2800 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2801 ptr_type = isPtrType ( token ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2802 if ( ptr_type != Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2803 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2804 if ( operand->dataSize == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2805 operand->dataSize = ptr_type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2806 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2807 stmt->error ( "multiple specifications of operand size" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2808 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2809 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2810 stmt->error ( "unknown operand size '%s'", token->toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2811 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2812 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2813 return parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2814 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2815 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2816 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2817 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2818 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2819 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2820 if ( token->ident == ident_seg ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2821 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2822 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2823 stmt->error ( "'seg' not supported" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2824 e = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2825 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2826 else if ( token->ident == Id::offset || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2827 token->ident == Id::offsetof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2828 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2829 if ( token->ident == Id::offset && ! global.params.useDeprecated ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2830 stmt->error ( "offset deprecated, use offsetof" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2831 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2832 e = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2833 e = new AddrExp ( stmt->loc, e ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2834 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2835 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2836 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2837 // primary exp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2838 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2839 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2840 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2841 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2842 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2843 case TOKnot: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2844 case TOKtilde: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2845 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2846 e = parseUnaExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2847 return intOp ( tv, e, NULL ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2848 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2849 // primary exp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2850 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2851 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2852 return parsePrimaryExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2853 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2854 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2855 Expression * parsePrimaryExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2856 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2857 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2858 Identifier * ident = NULL; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2859 |
1304
b995c146366e
Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents:
1303
diff
changeset
|
2860 // get rid of short/long prefixes for branches |
b995c146366e
Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents:
1303
diff
changeset
|
2861 if (opTakesLabel() && (token->value == TOKint16 || token->value == TOKint64)) |
b995c146366e
Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents:
1303
diff
changeset
|
2862 nextToken(); |
b995c146366e
Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents:
1303
diff
changeset
|
2863 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2864 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2865 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2866 case TOKint32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2867 case TOKuns32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2868 case TOKint64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2869 case TOKuns64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2870 // semantic here? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2871 // %% for tok64 really should use 64bit type |
962
a415d305477f
Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
961
diff
changeset
|
2872 e = new IntegerExp ( stmt->loc, token->uns64value, Type::tint64 ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2873 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2874 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2875 case TOKfloat32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2876 case TOKfloat64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2877 case TOKfloat80v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2878 // %% need different types? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2879 e = new RealExp ( stmt->loc, token->float80value, Type::tfloat80 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2880 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2881 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2882 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2883 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2884 ident = token->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2885 nextToken(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2886 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2887 if ( ident == Id::__LOCAL_SIZE ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2888 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2889 return new IdentifierExp ( stmt->loc, ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2890 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2891 else if ( ident == Id::__dollar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2892 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2893 do_dollar: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2894 return new IdentifierExp ( stmt->loc, ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2895 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2896 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2897 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2898 e = new IdentifierExp ( stmt->loc, ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2899 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2900 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2901 // If this is more than one component ref, it gets complicated: *(&Field + n) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2902 // maybe just do one step at a time.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2903 // simple case is Type.f -> VarDecl(field) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2904 // actually, DMD only supports on level... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2905 // X.y+Y.z[EBX] is supported, tho.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2906 // %% doesn't handle properties (check%%) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2907 while ( token->value == TOKdot ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2908 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2909 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2910 if ( token->value == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2911 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2912 e = new DotIdExp ( stmt->loc, e, token->ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2913 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2914 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2915 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2916 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2917 stmt->error ( "expected identifier" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2918 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2919 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2920 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2921 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2922 // check for reg first then dotexp is an error? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2923 if ( e->op == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2924 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2925 for ( int i = 0; i < N_Regs; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2926 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2927 if ( ident == regInfo[i].ident ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2928 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2929 if ( ( Reg ) i == Reg_ST && token->value == TOKlparen ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2930 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2931 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2932 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2933 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2934 case TOKint32v: case TOKuns32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2935 case TOKint64v: case TOKuns64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2936 if ( token->uns64value < 8 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2937 e = newRegExp ( ( Reg ) ( Reg_ST + token->uns64value ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2938 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2939 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2940 stmt->error ( "invalid floating point register index" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2941 e = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2942 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2943 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2944 if ( token->value == TOKrparen ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2945 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2946 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2947 stmt->error ( "expected ')'" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2948 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2949 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2950 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2951 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2952 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2953 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2954 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2955 else if ( token->value == TOKcolon ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2956 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2957 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2958 if ( operand->segmentPrefix != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2959 stmt->error ( "too many segment prefixes" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2960 else if ( i >= Reg_CS && i <= Reg_GS ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2961 operand->segmentPrefix = ( Reg ) i; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2962 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2963 stmt->error ( "'%s' is not a segment register", ident->string ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2964 return parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2965 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2966 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2967 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2968 return newRegExp ( ( Reg ) i ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2969 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2970 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2971 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2972 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2973 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2974 if ( opTakesLabel() /*opInfo->takesLabel()*/ && e->op == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2975 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2976 // DMD uses labels secondarily to other symbols, so check |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2977 // if IdentifierExp::semantic won't find anything. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2978 Dsymbol *scopesym; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2979 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2980 if ( ! sc->search ( stmt->loc, ident, & scopesym ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2981 return new DsymbolExp ( stmt->loc, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2982 sc->func->searchLabel ( ident ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2983 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2984 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2985 e = e->semantic ( sc ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2986 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2987 // Special case for floating point constant declarations. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2988 if ( e->op == TOKfloat64 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2989 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2990 Dsymbol * sym = sc->search ( stmt->loc, ident, NULL ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2991 if ( sym ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2992 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2993 VarDeclaration *v = sym->isVarDeclaration(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2994 if ( v ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2995 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2996 Expression *ve = new VarExp ( stmt->loc, v ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2997 ve->type = e->type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2998 e = ve; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
2999 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3000 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3001 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3002 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3003 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3004 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3005 case TOKdollar: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3006 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3007 ident = Id::__dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3008 goto do_dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3009 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3010 default: |
1091
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
3011 if ( op == Op_FMath0 || op == Op_FdST0ST1 || op == Op_FMath ) |
20d96c148b39
Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1085
diff
changeset
|
3012 return Handled; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3013 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3014 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3015 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3016 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3017 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3018 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3019 void doAlign() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3020 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3021 // .align bits vs. bytes... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3022 // apparently a.out platforms use bits instead of bytes... |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3023 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3024 // parse primary: DMD allows 'MyAlign' (const int) but not '2+2' |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3025 // GAS is padding with NOPs last time I checked. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3026 Expression * e = parseAsmExp()->optimize ( WANTvalue | WANTinterpret ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3027 uinteger_t align = e->toUInteger(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3028 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3029 if ( ( align & ( align - 1 ) ) == 0 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3030 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3031 //FIXME: This printf is not portable. The use of `align` varies from system to system; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3032 // on i386 using a.out, .align `n` will align on a 2^`n` boundary instead of an `n` boundary |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3033 #ifdef HAVE_GAS_BALIGN_AND_P2ALIGN |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3034 insnTemplate << ".balign\t" << align; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3035 #else |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3036 insnTemplate << ".align\t" << align; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3037 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3038 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3039 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3040 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3041 stmt->error ( "alignment must be a power of 2, not %u", ( unsigned ) align ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3042 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3043 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3044 setAsmCode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3045 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3046 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3047 void doEven() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3048 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3049 // .align for GAS is in bits, others probably use bytes.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3050 #ifdef HAVE_GAS_BALIGN_AND_P2ALIGN |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3051 insnTemplate << ".align\t2"; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3052 #else |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
3053 insnTemplate << ".align\t2"; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3054 #endif |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3055 setAsmCode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3056 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3057 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3058 void doNaked() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3059 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3060 // %% can we assume sc->func != 0? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3061 sc->func->naked = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3062 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3063 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3064 void doData() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3065 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3066 static const char * directives[] = { ".byte", ".short", ".long", ".long", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3067 "", "", "" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3068 }; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3069 // FIXME |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3070 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3071 machine_mode mode; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3072 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3073 insnTemplate->writestring((char*) directives[op - Op_db]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3074 insnTemplate->writebyte(' '); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3075 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3076 do { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3077 // DMD is pretty strict here, not even constant expressions are allowed.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3078 switch (op) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3079 case Op_db: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3080 case Op_ds: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3081 case Op_di: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3082 case Op_dl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3083 if (token->value == TOKint32v || token->value == TOKuns32v || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3084 token->value == TOKint64v || token->value == TOKuns64v) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3085 // As per usual with GNU, assume at least 32-bit host |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3086 if (op != Op_dl) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3087 insnTemplate->printf("%u", (d_uns32) token->uns64value); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3088 else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3089 // Output two .longS. GAS has .quad, but would have to rely on 'L' format .. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3090 // just need to use HOST_WIDE_INT_PRINT_DEC |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3091 insnTemplate->printf("%u,%u", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3092 (d_uns32) token->uns64value, (d_uns32) (token->uns64value >> 32)); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3093 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3094 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3095 stmt->error("expected integer constant"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3096 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3097 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3098 case Op_df: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3099 mode = SFmode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3100 goto do_float; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3101 case Op_dd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3102 mode = DFmode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3103 goto do_float; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3104 case Op_de: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3105 #ifndef TARGET_80387 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3106 #define XFmode TFmode |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3107 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3108 mode = XFmode; // not TFmode |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3109 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3110 do_float: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3111 if (token->value == TOKfloat32v || token->value == TOKfloat64v || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3112 token->value == TOKfloat80v) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3113 long words[3]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3114 real_to_target(words, & token->float80value.rv(), mode); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3115 // don't use directives..., just use .long like GCC |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3116 insnTemplate->printf(".long\t%u", words[0]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3117 if (mode != SFmode) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3118 insnTemplate->printf(",%u", words[1]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3119 // DMD outputs 10 bytes, so we need to switch to .short here |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3120 if (mode == XFmode) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3121 insnTemplate->printf("\n\t.short\t%u", words[2]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3122 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3123 stmt->error("expected float constant"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3124 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3125 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3126 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3127 abort(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3128 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3129 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3130 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3131 if (token->value == TOKcomma) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3132 insnTemplate->writebyte(','); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3133 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3134 } else if (token->value == TOKeof) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3135 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3136 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3137 stmt->error("expected comma"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3138 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3139 } while (1); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3140 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3141 setAsmCode();*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3142 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3143 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3144 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3145 #if D_GCC_VER < 40 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3146 // struct rtx was modified for c++; this macro from rtl.h needs to |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3147 // be modified accordingly. |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3148 #undef XEXP |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3149 #define XEXP(RTX, N) (RTL_CHECK2 (RTX, N, 'e', 'u').rt_rtx) |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3150 #endif |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3151 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3152 // FIXME |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3153 #define HOST_WIDE_INT long |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3154 bool getFrameRelativeValue ( LLValue* decl, HOST_WIDE_INT * result ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3155 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3156 assert ( 0 ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3157 // FIXME |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3158 // // Using this instead of DECL_RTL for struct args seems like a |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3159 // // good way to get hit by a truck because it may not agree with |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3160 // // non-asm access, but asm code wouldn't know what GCC does anyway. */ |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3161 // rtx r = DECL_INCOMING_RTL(decl); |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3162 // rtx e1, e2; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3163 // |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3164 // // Local variables don't have DECL_INCOMING_RTL |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3165 // if (r == NULL_RTX) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3166 // r = DECL_RTL(decl); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3167 // |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3168 // if (r != NULL_RTX && GET_CODE(r) == MEM /* && r->frame_related */ ) { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3169 // r = XEXP(r, 0); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3170 // if (GET_CODE(r) == PLUS) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3171 // e1 = XEXP(r, 0); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3172 // e2 = XEXP(r, 1); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3173 // if (e1 == virtual_incoming_args_rtx && GET_CODE(e2) == CONST_INT) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3174 // *result = INTVAL(e2) + 8; // %% 8 is 32-bit specific... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3175 // return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3176 // } else if (e1 == virtual_stack_vars_rtx && GET_CODE(e2) == CONST_INT) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3177 // *result = INTVAL(e2); // %% 8 is 32-bit specific... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3178 // return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3179 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3180 // } else if (r == virtual_incoming_args_rtx) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3181 // *result = 8; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3182 // return true; // %% same as above |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3183 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3184 // // shouldn't have virtual_stack_vars_rtx by itself |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3185 // } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3186 // |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3187 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3188 } |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3189 |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3190 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3191 struct AsmParser : public AsmParserCommon |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3192 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3193 virtual void run ( Scope* sc, AsmStatement* asmst ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3194 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3195 AsmProcessor ap ( sc, asmst ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3196 ap.run(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3197 } |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3198 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3199 virtual std::string getRegName ( int i ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3200 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3201 return regInfo[i].gccName; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3202 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
935
diff
changeset
|
3203 }; |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3204 |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3205 } |