annotate gen/asm-x86-32.h @ 1302:a26b99b7e293

Translate fsub/fdiv correctly. See #256.
author Christian Kamm <kamm incasoftware de>
date Wed, 06 May 2009 18:08:44 +0200
parents 1e30cc395d2e
children c250e03d8a5b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
304
3ebc136702dd [svn r325] Removed dead code.
ChristianK
parents: 302
diff changeset
1 // Taken from GDC source tree. Original by David Friedman.
3ebc136702dd [svn r325] Removed dead code.
ChristianK
parents: 302
diff changeset
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: 924
diff changeset
6 namespace AsmParserx8632
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
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: 924
diff changeset
9 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
10 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
11 Reg_Invalid = -1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
12 Reg_EAX = 0,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
13 Reg_EBX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
14 Reg_ECX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
15 Reg_EDX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
16 Reg_ESI,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
17 Reg_EDI,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
18 Reg_EBP,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
19 Reg_ESP,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
20 Reg_ST,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
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: 924
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: 924
diff changeset
23 Reg_XMM0, Reg_XMM1, Reg_XMM2, Reg_XMM3, Reg_XMM4, Reg_XMM5, Reg_XMM6, Reg_XMM7,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
24 // xmm8-15?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
25 Reg_EFLAGS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
26 Reg_CS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
27 Reg_DS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
28 Reg_SS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
29 Reg_ES,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
30 Reg_FS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
31 Reg_GS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
32 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: 924
diff changeset
33 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: 924
diff changeset
34 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: 924
diff changeset
35 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: 924
diff changeset
36 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: 924
diff changeset
37 } Reg;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
38
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
39 static const int N_Regs = /*gp*/ 8 + /*fp*/ 8 + /*mmx*/ 8 + /*sse*/ 8 +
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
40 /*seg*/ 6 + /*16bit*/ 8 + /*8bit*/ 8 + /*sys*/ 4+6+5 + /*flags*/ + 1;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
41
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
42 #define NULL_TREE ""
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
43
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
44 static struct
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
45 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
46 const char * name;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
47 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: 924
diff changeset
48 Identifier * ident;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
49 char size;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
50 char baseReg; // %% todo: Reg, Reg_XX
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
51 } regInfo[N_Regs] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
52 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
53 { "EAX", NULL_TREE, NULL, 4, Reg_EAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
54 { "EBX", NULL_TREE, NULL, 4, Reg_EBX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
55 { "ECX", NULL_TREE, NULL, 4, Reg_ECX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
56 { "EDX", NULL_TREE, NULL, 4, Reg_EDX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
57 { "ESI", NULL_TREE, NULL, 4, Reg_ESI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
58 { "EDI", NULL_TREE, NULL, 4, Reg_EDI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
59 { "EBP", NULL_TREE, NULL, 4, Reg_EBP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
60 { "ESP", NULL_TREE, NULL, 4, Reg_ESP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
61 { "ST", NULL_TREE, NULL, 10, Reg_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
62 { "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: 924
diff changeset
63 { "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: 924
diff changeset
64 { "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: 924
diff changeset
65 { "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: 924
diff changeset
66 { "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: 924
diff changeset
67 { "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: 924
diff changeset
68 { "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: 924
diff changeset
69 { "MM0", NULL_TREE, NULL, 8, Reg_MM0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
70 { "MM1", NULL_TREE, NULL, 8, Reg_MM1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
71 { "MM2", NULL_TREE, NULL, 8, Reg_MM2 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
72 { "MM3", NULL_TREE, NULL, 8, Reg_MM3 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
73 { "MM4", NULL_TREE, NULL, 8, Reg_MM4 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
74 { "MM5", NULL_TREE, NULL, 8, Reg_MM5 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
75 { "MM6", NULL_TREE, NULL, 8, Reg_MM6 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
76 { "MM7", NULL_TREE, NULL, 8, Reg_MM7 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
77 { "XMM0", NULL_TREE, NULL, 16, Reg_XMM0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
78 { "XMM1", NULL_TREE, NULL, 16, Reg_XMM1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
79 { "XMM2", NULL_TREE, NULL, 16, Reg_XMM2 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
80 { "XMM3", NULL_TREE, NULL, 16, Reg_XMM3 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
81 { "XMM4", NULL_TREE, NULL, 16, Reg_XMM4 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
82 { "XMM5", NULL_TREE, NULL, 16, Reg_XMM5 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
83 { "XMM6", NULL_TREE, NULL, 16, Reg_XMM6 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
84 { "XMM7", NULL_TREE, NULL, 16, Reg_XMM7 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
85 { "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: 924
diff changeset
86 { "CS", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
87 { "DS", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
88 { "SS", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
89 { "ES", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
90 { "FS", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
91 { "GS", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
92 { "AX", NULL_TREE, NULL, 2, Reg_EAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
93 { "BX", NULL_TREE, NULL, 2, Reg_EBX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
94 { "CX", NULL_TREE, NULL, 2, Reg_ECX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
95 { "DX", NULL_TREE, NULL, 2, Reg_EDX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
96 { "SI", NULL_TREE, NULL, 2, Reg_ESI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
97 { "DI", NULL_TREE, NULL, 2, Reg_EDI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
98 { "BP", NULL_TREE, NULL, 2, Reg_EBP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
99 { "SP", NULL_TREE, NULL, 2, Reg_ESP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
100 { "AL", NULL_TREE, NULL, 1, Reg_EAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
101 { "AH", NULL_TREE, NULL, 1, Reg_EAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
102 { "BL", NULL_TREE, NULL, 1, Reg_EBX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
103 { "BH", NULL_TREE, NULL, 1, Reg_EBX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
104 { "CL", NULL_TREE, NULL, 1, Reg_ECX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
105 { "CH", NULL_TREE, NULL, 1, Reg_ECX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
106 { "DL", NULL_TREE, NULL, 1, Reg_EDX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
107 { "DH", NULL_TREE, NULL, 1, Reg_EDX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
108 { "CR0", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
109 { "CR2", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
110 { "CR3", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
111 { "CR4", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
112 { "DR0", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
113 { "DR1", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
114 { "DR2", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
115 { "DR3", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
116 { "DR6", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
117 { "DR7", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
118 { "TR3", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
119 { "TR4", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
120 { "TR5", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
121 { "TR6", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
122 { "TR7", NULL_TREE, NULL, 0, -1 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
123 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
124
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
125 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
126 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
127 No_Type_Needed,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
128 Int_Types,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
129 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: 924
diff changeset
130 FP_Types,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
131 FPInt_Types,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
132 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: 924
diff changeset
133 } TypeNeeded;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
134
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
135 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
136 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
137 No_Link,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
138 Out_Mnemonic,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
139 Next_Form
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
140 } OpLink;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
141
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
142 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
143 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
144 Clb_SizeAX = 0x01,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
145 Clb_SizeDXAX = 0x02,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
146 Clb_EAX = 0x03,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
147 Clb_DXAX_Mask = 0x03,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
148
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
149 Clb_Flags = 0x04,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
150 Clb_DI = 0x08,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
151 Clb_SI = 0x10,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
152 Clb_CX = 0x20,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
153 Clb_ST = 0x40,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
154 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: 924
diff changeset
155 } ImplicitClober;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
156
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
157 // "^ +/..\([A-Za-z_0-9]+\).*" -> " \1,"
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
158 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
159 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
160 Op_Invalid,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
161 Op_Adjust,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
162 Op_Dst,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
163 Op_Upd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
164 Op_DstW,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
165 Op_DstF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
166 Op_UpdF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
167 Op_DstSrc,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
168 Op_DstSrcF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
169 Op_UpdSrcF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
170 Op_DstSrcFW,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
171 Op_UpdSrcFW,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
172 Op_DstSrcSSE,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
173 Op_DstSrcMMX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
174 Op_DstSrcImmS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
175 Op_DstSrcImmM,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
176 Op_UpdSrcShft,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
177 Op_DstSrcNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
178 Op_UpdSrcNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
179 Op_DstMemNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
180 Op_DstRMBNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
181 Op_DstRMWNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
182 Op_UpdUpd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
183 Op_UpdUpdF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
184 Op_Src,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
185 Op_SrcRMWNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
186 Op_SrcW,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
187 Op_SrcImm,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
188 Op_Src_DXAXF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
189 Op_SrcMemNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
190 Op_SrcMemNTF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
191 Op_SrcSrc,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
192 Op_SrcSrcF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
193 Op_SrcSrcFW,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
194 Op_SrcSrcSSEF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
195 Op_SrcSrcMMX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
196 Op_Shift,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
197 Op_Branch,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
198 Op_CBranch,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
199 Op_0,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
200 Op_0_AX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
201 Op_0_DXAX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
202 Op_Loop,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
203 Op_Flags,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
204 Op_F0_ST,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
205 Op_F0_P,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
206 Op_Fs_P,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
207 Op_Fis,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
208 Op_Fis_ST,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
209 Op_Fis_P,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
210 Op_Fid,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
211 Op_Fid_P,
1087
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
212 Op_FidR_P,
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
213 Op_Ffd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
214 Op_FfdR,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
215 Op_Ffd_P,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
216 Op_FfdR_P,
1056
cc723604da95 Fixed two operand form of X86 fstp instruction. (throw away second operand!)
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 944
diff changeset
217 Op_FfdRR_P,
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
218 Op_Fd_P,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
219 Op_FdST,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
220 Op_FMath,
1092
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
221 Op_FMath0,
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
222 Op_FMath2,
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
223 Op_FdSTiSTi,
1092
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
224 Op_FdST0ST1,
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
225 Op_FPMath,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
226 Op_FCmp,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
227 Op_FCmp1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
228 Op_FCmpP,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
229 Op_FCmpP1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
230 Op_FCmpFlg,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
231 Op_FCmpFlgP,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
232 Op_fld,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
233 Op_fldR,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
234 Op_fxch,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
235 Op_fxch1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
236 Op_fxch0,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
237 Op_SizedStack,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
238 Op_bound,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
239 Op_bswap,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
240 Op_cmps,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
241 Op_cmpsd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
242 Op_cmpsX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
243 Op_cmpxchg8b,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
244 Op_cmpxchg,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
245 Op_cpuid,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
246 Op_enter,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
247 Op_fdisi,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
248 Op_feni,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
249 Op_fsetpm,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
250 Op_fXstsw,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
251 Op_imul,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
252 Op_imul2,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
253 Op_imul1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
254 Op_in,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
255 Op_ins,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
256 Op_insX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
257 Op_iret,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
258 Op_iretd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
259 Op_lods,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
260 Op_lodsX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
261 Op_movs,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
262 Op_movsd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
263 Op_movsX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
264 Op_movsx,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
265 Op_movzx,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
266 Op_mul,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
267 Op_out,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
268 Op_outs,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
269 Op_outsX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
270 Op_push,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
271 Op_ret,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
272 Op_retf,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
273 Op_scas,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
274 Op_scasX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
275 Op_stos,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
276 Op_stosX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
277 Op_xlat,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
278 N_AsmOpInfo,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
279 Op_Align,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
280 Op_Even,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
281 Op_Naked,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
282 Op_db,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
283 Op_ds,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
284 Op_di,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
285 Op_dl,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
286 Op_df,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
287 Op_dd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
288 Op_de
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
289 } AsmOp;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
290
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
291 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
292 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
293 Opr_None = 0,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
294 OprC_MRI = 1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
295 OprC_MR = 2,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
296 OprC_Mem = 3,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
297 OprC_Reg = 4,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
298 OprC_Imm = 5,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
299 OprC_SSE = 6,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
300 OprC_SSE_Mem = 7,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
301 OprC_R32 = 8,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
302 OprC_RWord = 9,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
303 OprC_RFP = 10,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
304 OprC_AbsRel = 11,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
305 OprC_Relative = 12,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
306 OprC_Port = 13, // DX or imm
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
307 OprC_AX = 14, // AL,AX,EAX
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
308 OprC_DX = 15, // only DX
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
309 OprC_MMX = 16,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
310 OprC_MMX_Mem = 17,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
311 OprC_Shift = 18, // imm or CL
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
312
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
313 Opr_ClassMask = 0x1f,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
314
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
315 Opr_Dest = 0x20,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
316 Opr_Update = 0x60,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
317
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
318 Opr_NoType = 0x80,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
319 } OprVals;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
320
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
321
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
322 typedef struct
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
323 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
324 } AsmOprInfo;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
325
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
326 typedef unsigned char Opr;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
327
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
328 typedef struct
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
329 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
330 Opr operands[3];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
331 unsigned char
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
332 needsType : 3,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
333 implicitClobbers : 8,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
334 linkType : 2;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
335 unsigned link;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
336
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
337 /*
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
338 bool takesLabel() {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
339 return operands[0] & Opr_Label;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
340 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
341 */
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
342
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
343 unsigned nOperands()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
344 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
345 if ( !operands[0] )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
346 return 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
347 else if ( !operands[1] )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
348 return 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
349 else if ( !operands[2] )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
350 return 2;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
351 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
352 return 3;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
353 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
354 } AsmOpInfo;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
355
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
356 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
357 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
358 Mn_fdisi,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
359 Mn_feni,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
360 Mn_fsetpm,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
361 Mn_iretw,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
362 Mn_iret,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
363 Mn_lret,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
364 Mn_cmpxchg8b,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
365 N_AltMn
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
366 } Alternate_Mnemonics;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
367
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
368 static const char * alternateMnemonics[N_AltMn] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
369 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
370 ".byte 0xdb, 0xe1",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
371 ".byte 0xdb, 0xe0",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
372 ".byte 0xdb, 0xe4",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
373 "iretw",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
374 "iret",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
375 "lret",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
376 "cmpxchg8b"
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
377 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
378
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
379 #define mri OprC_MRI
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
380 #define mr OprC_MR
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
381 #define mem OprC_Mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
382 // for now mfp=mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
383 #define mfp OprC_Mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
384 #define reg OprC_Reg
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
385 #define imm OprC_Imm
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
386 #define sse OprC_SSE
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
387 #define ssem OprC_SSE_Mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
388 #define mmx OprC_MMX
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
389 #define mmxm OprC_MMX_Mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
390 #define r32 OprC_R32
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
391 #define rw OprC_RWord
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
392 #define rfp OprC_RFP
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
393 #define port OprC_Port
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
394 #define ax OprC_AX
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
395 #define dx OprC_DX
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
396 #define shft OprC_Shift
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
397 #define D Opr_Dest
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
398 #define U Opr_Update
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
399 #define N Opr_NoType
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
400 //#define L Opr_Label
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
401
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
402 // D=dest, N=notype
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
403 static AsmOpInfo asmOpInfo[N_AsmOpInfo] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
404 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
405 /* Op_Invalid */ {},
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
406 /* 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: 924
diff changeset
407 /* Op_Dst */ { D|mr, 0, 0, 1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
408 /* Op_Upd */ { U|mr, 0, 0, 1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
409 /* 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: 924
diff changeset
410 /* 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: 924
diff changeset
411 /* 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: 924
diff changeset
412 /* Op_DstSrc */ { D|mr, mri, 0,/**/1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
413 /* 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: 924
diff changeset
414 /* 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: 924
diff changeset
415 /* 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: 924
diff changeset
416 /* 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: 924
diff changeset
417 /* 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: 924
diff changeset
418 /* 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: 924
diff changeset
419 /* 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: 924
diff changeset
420 /* 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: 924
diff changeset
421 /* 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: 924
diff changeset
422 /* 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: 924
diff changeset
423 /* 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: 924
diff changeset
424 /* Op_DstMemNT */ { D|mem, 0, 0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
425 /* 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: 924
diff changeset
426 /* Op_DstRMWNT */ { D|mr, 0, 0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
427 /* 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: 924
diff changeset
428 /* 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: 924
diff changeset
429 /* Op_Src */ { mri, 0, 0, 1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
430 /* Op_SrcRMWNT */ { mr, 0, 0, 0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
431 /* Op_SrcW */ { mri, 0, 0, Word_Types },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
432 /* Op_SrcImm */ { imm },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
433 /* 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: 924
diff changeset
434 /* Op_SrcMemNT */ { mem, 0, 0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
435 /* 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: 924
diff changeset
436 /* Op_SrcSrc */ { mr, mri, 0, 1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
437 /* 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: 924
diff changeset
438 /* 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: 924
diff changeset
439 /* 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: 924
diff changeset
440 /* Op_SrcSrcMMX */ { mmx, mmx, 0, },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
441 /* Op_Shift */ { D|mr,N|shft, 0,/**/1, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
442 /* Op_Branch */ { mri },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
443 /* Op_CBranch */ { imm },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
444 /* Op_0 */ { 0,0,0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
445 /* 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: 924
diff changeset
446 /* 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: 924
diff changeset
447 /* 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: 924
diff changeset
448 /* 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: 924
diff changeset
449 /* 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: 924
diff changeset
450 /* 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: 924
diff changeset
451 /* 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: 924
diff changeset
452 /* 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: 924
diff changeset
453 /* 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: 924
diff changeset
454 /* 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: 924
diff changeset
455 /* Op_Fid */ { D|mem, 0, 0, FPInt_Types }, // only 16bit and 32bit, DMD defaults to 16bit
1105
cdb7e1167803 - Fixed building tango-user-ldc on x86-32.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1102
diff changeset
456 /* Op_Fid_P */ { D|mem, 0, 0, 0, Clb_ST, Next_Form, Op_FidR_P }, // push and pop, fild so also 64 bit
cdb7e1167803 - Fixed building tango-user-ldc on x86-32.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1102
diff changeset
457 /* Op_FidR_P */ { D|mem,rfp, 0, 0, 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: 924
diff changeset
458 /* 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: 924
diff changeset
459 /* Op_FfdR */ { D|rfp, 0, 0 },
1056
cc723604da95 Fixed two operand form of X86 fstp instruction. (throw away second operand!)
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 944
diff changeset
460 /* Op_Ffd_P */ { D|mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_FfdR_P }, // pop, fld so also 80 bit, "
cc723604da95 Fixed two operand form of X86 fstp instruction. (throw away second operand!)
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 944
diff changeset
461 /* Op_FfdR_P */ { D|rfp, 0, 0, 0, Clb_ST, Next_Form, Op_FfdRR_P },
1106
feca4947d1f2 Corrected bad asm match for fstp on x86-32
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1105
diff changeset
462 /* 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: 924
diff changeset
463 /* 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: 924
diff changeset
464 /* Op_FdST */ { D|rfp, 0, 0 },
1092
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
465 /* Op_FMath */ { mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_FMath0 }, // and only single or double prec
1101
8bf8b058944a Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents: 1100
diff changeset
466 /* Op_FMath0 */ { 0, 0, 0, 0, Clb_ST, Next_Form, Op_FMath2 },
8bf8b058944a Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents: 1100
diff changeset
467 /* Op_FMath2 */ { D|rfp, rfp, 0, 0, Clb_ST, Next_Form, Op_FdST0ST1 },
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
468 /* Op_FdSTiSTi */ { D|rfp, rfp, 0, },
1092
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
469 /* Op_FdST0ST1 */ { 0, 0, 0, },
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
470 /* 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: 924
diff changeset
471 /* 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: 924
diff changeset
472 /* 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: 924
diff changeset
473 /* 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: 924
diff changeset
474 /* 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: 924
diff changeset
475 /* 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: 924
diff changeset
476 /* 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: 924
diff changeset
477 /* 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: 924
diff changeset
478 /* 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: 924
diff changeset
479 /* 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: 924
diff changeset
480 /* 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: 924
diff changeset
481 /* 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: 924
diff changeset
482 /* 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: 924
diff changeset
483 /* 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: 924
diff changeset
484 /* Op_bswap */ { D|r32 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
485 /* 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: 924
diff changeset
486 /* 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: 924
diff changeset
487 /* 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: 924
diff changeset
488 /* 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: 924
diff changeset
489 /* 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: 924
diff changeset
490 /* 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: 924
diff changeset
491 /* 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: 924
diff changeset
492 /* 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: 924
diff changeset
493 /* 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: 924
diff changeset
494 /* 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: 924
diff changeset
495 /* 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: 924
diff changeset
496 /* 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: 924
diff changeset
497 /* 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: 924
diff changeset
498 /* 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: 924
diff changeset
499 /* 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: 924
diff changeset
500 /* 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: 924
diff changeset
501 /* 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: 924
diff changeset
502 /* 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: 924
diff changeset
503 /* Op_iretd */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_iret },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
504 /* 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: 924
diff changeset
505 /* 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: 924
diff changeset
506 /* 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: 924
diff changeset
507 /* 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: 924
diff changeset
508 /* 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: 924
diff changeset
509 /* 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: 924
diff changeset
510 /* 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: 924
diff changeset
511 /* 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: 924
diff changeset
512 /* Op_out */ { N|port,ax, 0, 1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
513 /* 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: 924
diff changeset
514 /* 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: 924
diff changeset
515 /* Op_push */ { mri, 0, 0, Word_Types, 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: 924
diff changeset
516 /* 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: 924
diff changeset
517 /* 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: 924
diff changeset
518 /* 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: 924
diff changeset
519 /* 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: 924
diff changeset
520 /* 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: 924
diff changeset
521 /* 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: 924
diff changeset
522 /* 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: 924
diff changeset
523
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
524 /// * 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: 924
diff changeset
525 /// * 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: 924
diff changeset
526 /// * 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: 924
diff changeset
527 /// * 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: 924
diff changeset
528 /// * 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: 924
diff changeset
529 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
530
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
531 #undef mri
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
532 #undef mr
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
533 #undef mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
534 #undef mfp
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
535 #undef reg
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
536 #undef imm
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
537 #undef sse
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
538 #undef ssem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
539 #undef mmx
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
540 #undef mmxm
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
541 #undef r32
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
542 #undef rw
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
543 #undef rfp
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
544 #undef port
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
545 #undef ax
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
546 #undef dx
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
547 #undef shft
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
548 #undef D
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
549 #undef U
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
550 #undef N
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
551 //#undef L
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
552
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
553 typedef struct
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
554 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
555 const char * inMnemonic;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
556 AsmOp asmOp;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
557 } AsmOpEnt;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
558
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
559 /* Some opcodes which have data size restrictions, but we don't check
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
560
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
561 cmov, l<segreg> ?, lea, lsl, shld
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
562
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
563 todo: push <immediate> is always the 32-bit form, even tho push <mem> is 16-bit
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
564 */
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
565
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
566 static AsmOpEnt opData[] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
567 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
568 { "aaa", Op_Adjust },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
569 { "aad", Op_Adjust },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
570 { "aam", Op_Adjust },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
571 { "aas", Op_Adjust },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
572 { "adc", Op_UpdSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
573 { "add", Op_UpdSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
574 { "addpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
575 { "addps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
576 { "addsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
577 { "addss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
578 { "addsubpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
579 { "addsubps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
580 { "align", Op_Align },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
581 { "and", Op_UpdSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
582 { "andnpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
583 { "andnps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
584 { "andpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
585 { "andps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
586 { "arpl", Op_UpdSrcNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
587 { "bound", Op_bound },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
588 { "bsf", Op_SrcSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
589 { "bsr", Op_SrcSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
590 { "bswap", Op_bswap },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
591 { "bt", Op_SrcSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
592 { "btc", Op_UpdSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
593 { "btr", Op_UpdSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
594 { "bts", Op_UpdSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
595 { "call", Op_Branch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
596 { "cbw", Op_0_AX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
597 { "cdq", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
598 { "clc", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
599 { "cld", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
600 { "clflush",Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
601 { "cli", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
602 { "clts", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
603 { "cmc", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
604 { "cmova", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
605 { "cmovae", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
606 { "cmovb", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
607 { "cmovbe", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
608 { "cmovc", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
609 { "cmove", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
610 { "cmovg", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
611 { "cmovge", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
612 { "cmovl", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
613 { "cmovle", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
614 { "cmovna", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
615 { "cmovnae",Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
616 { "cmovnb", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
617 { "cmovnbe",Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
618 { "cmovnc", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
619 { "cmovne", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
620 { "cmovng", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
621 { "cmovnge",Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
622 { "cmovnl", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
623 { "cmovnle",Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
624 { "cmovno", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
625 { "cmovnp", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
626 { "cmovns", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
627 { "cmovnz", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
628 { "cmovo", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
629 { "cmovp", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
630 { "cmovpe", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
631 { "cmovpo", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
632 { "cmovs", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
633 { "cmovz", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
634 { "cmp", Op_SrcSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
635 { "cmppd", Op_DstSrcImmS },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
636 { "cmpps", Op_DstSrcImmS },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
637 { "cmps", Op_cmps },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
638 { "cmpsb", Op_cmpsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
639 { "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: 924
diff changeset
640 { "cmpss", Op_DstSrcImmS },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
641 { "cmpsw", Op_cmpsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
642 { "cmpxch8b", Op_cmpxchg8b }, // %% DMD opcode typo?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
643 { "cmpxchg", Op_cmpxchg },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
644 { "comisd", Op_SrcSrcSSEF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
645 { "comiss", Op_SrcSrcSSEF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
646 { "cpuid", Op_cpuid },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
647 { "cvtdq2pd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
648 { "cvtdq2ps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
649 { "cvtpd2dq", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
650 { "cvtpd2pi", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
651 { "cvtpd2ps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
652 { "cvtpi2pd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
653 { "cvtpi2ps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
654 { "cvtps2dq", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
655 { "cvtps2pd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
656 { "cvtps2pi", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
657 { "cvtsd2si", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
658 { "cvtsd2ss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
659 { "cvtsi2sd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
660 { "cvtsi2ss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
661 { "cvtss2sd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
662 { "cvtss2si", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
663 { "cvttpd2dq", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
664 { "cvttpd2pi", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
665 { "cvttps2dq", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
666 { "cvttps2pi", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
667 { "cvttsd2si", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
668 { "cvttss2si", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
669 { "cwd", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
670 { "cwde", Op_0_AX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
671 //{ "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: 924
diff changeset
672 { "daa", Op_Adjust },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
673 { "das", Op_Adjust },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
674 { "db", Op_db },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
675 { "dd", Op_dd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
676 { "de", Op_de },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
677 { "dec", Op_UpdF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
678 { "df", Op_df },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
679 { "di", Op_di },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
680 { "div", Op_Src_DXAXF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
681 { "divpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
682 { "divps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
683 { "divsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
684 { "divss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
685 { "dl", Op_dl },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
686 { "dq", Op_dl },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
687 { "ds", Op_ds },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
688 { "dt", Op_de },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
689 { "dw", Op_ds },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
690 { "emms", Op_0 }, // clobber all mmx/fp?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
691 { "enter", Op_enter },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
692 { "even", Op_Even },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
693 { "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: 924
diff changeset
694 { "fabs", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
695 { "fadd", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
696 { "faddp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
697 { "fbld", Op_Fs_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
698 { "fbstp", Op_Fd_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
699 { "fchs", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
700 { "fclex", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
701 { "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: 924
diff changeset
702 { "fcmovbe", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
703 { "fcmove", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
704 { "fcmovnb", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
705 { "fcmovnbe", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
706 { "fcmovne", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
707 { "fcmovnu", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
708 { "fcmovu", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
709 { "fcom", Op_FCmp },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
710 { "fcomi", Op_FCmpFlg },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
711 { "fcomip", Op_FCmpFlgP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
712 { "fcomp", Op_FCmpP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
713 { "fcompp", Op_F0_P }, // pops twice
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
714 { "fcos", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
715 { "fdecstp",Op_F0_P }, // changes stack
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
716 { "fdisi", Op_fdisi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
717 { "fdiv", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
718 { "fdivp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
719 { "fdivr", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
720 { "fdivrp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
721 { "feni", Op_feni },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
722 { "ffree", Op_FdST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
723 { "fiadd", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
724 { "ficom", Op_Fis },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
725 { "ficomp", Op_Fis_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
726 { "fidiv", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
727 { "fidivr", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
728 { "fild", Op_Fis_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
729 { "fimul", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
730 { "fincstp",Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
731 { "finit", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
732 { "fist", Op_Fid }, // only 16,32bit
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
733 { "fistp", Op_Fid_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
734 { "fisttp", Op_Fid_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
735 { "fisub", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
736 { "fisubr", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
737 { "fld", Op_fld },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
738 { "fld1", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
739 { "fldcw", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
740 { "fldenv", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
741 { "fldl2e", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
742 { "fldl2t", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
743 { "fldlg2", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
744 { "fldln2", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
745 { "fldpi", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
746 { "fldz", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
747 { "fmul", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
748 { "fmulp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
749 { "fnclex", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
750 { "fndisi", Op_fdisi }, // ??
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
751 { "fneni", Op_feni }, // ??
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
752 { "fninit", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
753 { "fnop", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
754 { "fnsave", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
755 { "fnstcw", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
756 { "fnstenv",Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
757 { "fnstsw", Op_fXstsw },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
758 { "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: 924
diff changeset
759 { "fprem", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
760 { "fprem1", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
761 { "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: 924
diff changeset
762 { "frndint",Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
763 { "frstor", Op_SrcMemNT }, // but clobbers everything
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
764 { "fsave", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
765 { "fscale", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
766 { "fsetpm", Op_fsetpm },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
767 { "fsin", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
768 { "fsincos",Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
769 { "fsqrt", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
770 { "fst", Op_Ffd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
771 { "fstcw", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
772 { "fstenv", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
773 { "fstp", Op_Ffd_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
774 { "fstsw", Op_fXstsw },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
775 { "fsub", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
776 { "fsubp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
777 { "fsubr", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
778 { "fsubrp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
779 { "ftst", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
780 { "fucom", Op_FCmp },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
781 { "fucomi", Op_FCmpFlg },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
782 { "fucomip",Op_FCmpFlgP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
783 { "fucomp", Op_FCmpP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
784 { "fucompp",Op_F0_P }, // pops twice
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
785 { "fwait", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
786 { "fxam", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
787 { "fxch", Op_fxch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
788 { "fxrstor",Op_SrcMemNT }, // clobbers FP,MMX,SSE
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
789 { "fxsave", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
790 { "fxtract",Op_F0_P }, // pushes
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
791 { "fyl2x", Op_F0_P }, // pops
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
792 { "fyl2xp1",Op_F0_P }, // pops
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
793 { "haddpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
794 { "haddps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
795 { "hlt", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
796 { "hsubpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
797 { "hsubps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
798 { "idiv", Op_Src_DXAXF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
799 { "imul", Op_imul },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
800 { "in", Op_in },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
801 { "inc", Op_UpdF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
802 { "ins", Op_ins },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
803 { "insb", Op_insX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
804 { "insd", Op_insX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
805 { "insw", Op_insX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
806 { "int", Op_SrcImm },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
807 { "into", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
808 { "invd", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
809 { "invlpg", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
810 { "iret", Op_iret },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
811 { "iretd", Op_iretd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
812 { "ja", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
813 { "jae", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
814 { "jb", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
815 { "jbe", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
816 { "jc", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
817 { "jcxz", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
818 { "je", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
819 { "jecxz", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
820 { "jg", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
821 { "jge", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
822 { "jl", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
823 { "jle", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
824 { "jmp", Op_Branch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
825 { "jna", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
826 { "jnae", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
827 { "jnb", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
828 { "jnbe", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
829 { "jnc", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
830 { "jne", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
831 { "jng", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
832 { "jnge", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
833 { "jnl", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
834 { "jnle", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
835 { "jno", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
836 { "jnp", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
837 { "jns", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
838 { "jnz", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
839 { "jo", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
840 { "jp", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
841 { "jpe", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
842 { "jpo", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
843 { "js", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
844 { "jz", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
845 { "lahf", Op_0_AX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
846 { "lar", Op_DstSrcFW }, // reg dest only
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
847 { "lddqu", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
848 { "ldmxcsr", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
849 { "lds", Op_DstSrc }, // reg dest only
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
850 { "lea", Op_DstSrc }, // "
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
851 { "leave", Op_0 }, // EBP,ESP clobbers
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
852 { "les", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
853 { "lfence",Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
854 { "lfs", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
855 { "lgdt", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
856 { "lgs", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
857 { "lidt", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
858 { "lldt", Op_SrcRMWNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
859 { "lmsw", Op_SrcRMWNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
860 { "lock", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
861 { "lods", Op_lods },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
862 { "lodsb", Op_lodsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
863 { "lodsd", Op_lodsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
864 { "lodsw", Op_lodsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
865 { "loop", Op_Loop },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
866 { "loope", Op_Loop },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
867 { "loopne",Op_Loop },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
868 { "loopnz",Op_Loop },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
869 { "loopz", Op_Loop },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
870 { "lsl", Op_DstSrcFW }, // reg dest only
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
871 { "lss", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
872 { "ltr", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
873 { "maskmovdqu", Op_SrcSrcMMX }, // writes to [edi]
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
874 { "maskmovq", Op_SrcSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
875 { "maxpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
876 { "maxps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
877 { "maxsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
878 { "maxss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
879 { "mfence",Op_0},
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
880 { "minpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
881 { "minps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
882 { "minsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
883 { "minss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
884 { "monitor", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
885 { "mov", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
886 { "movapd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
887 { "movaps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
888 { "movd", Op_DstSrcNT }, // also mmx and sse
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
889 { "movddup", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
890 { "movdq2q", Op_DstSrcNT }, // mmx/sse
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
891 { "movdqa", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
892 { "movdqu", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
893 { "movhlps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
894 { "movhpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
895 { "movhps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
896 { "movlhps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
897 { "movlpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
898 { "movlps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
899 { "movmskpd",Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
900 { "movmskps",Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
901 { "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: 924
diff changeset
902 { "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: 924
diff changeset
903 { "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: 924
diff changeset
904 { "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: 924
diff changeset
905 { "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: 924
diff changeset
906 { "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: 924
diff changeset
907 { "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: 924
diff changeset
908 { "movs", Op_movs },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
909 { "movsb", Op_movsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
910 { "movsd", Op_movsd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
911 { "movshdup", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
912 { "movsldup", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
913 { "movss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
914 { "movsw", Op_movsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
915 { "movsx", Op_movsx }, // word-only, reg dest
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
916 { "movupd",Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
917 { "movups",Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
918 { "movzx", Op_movzx },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
919 { "mul", Op_mul },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
920 { "mulpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
921 { "mulps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
922 { "mulsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
923 { "mulss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
924 { "mwait", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
925 { "naked", Op_Naked },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
926 { "neg", Op_UpdF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
927 { "nop", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
928 { "not", Op_Upd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
929 { "or", Op_UpdSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
930 { "orpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
931 { "orps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
932 { "out", Op_out },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
933 { "outs", Op_outs },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
934 { "outsb", Op_outsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
935 { "outsd", Op_outsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
936 { "outsw", Op_outsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
937 { "packssdw", Op_DstSrcMMX }, // %% also SSE
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
938 { "packsswb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
939 { "packuswb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
940 { "paddb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
941 { "paddd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
942 { "paddq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
943 { "paddsb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
944 { "paddsw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
945 { "paddusb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
946 { "paddusw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
947 { "paddw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
948 { "pand", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
949 { "pandn", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
950 { "pavgb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
951 { "pavgw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
952 { "pcmpeqb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
953 { "pcmpeqd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
954 { "pcmpeqw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
955 { "pcmpgtb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
956 { "pcmpgtd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
957 { "pcmpgtw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
958 { "pextrw", Op_DstSrcImmM }, // gpr32 dest
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
959 { "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: 924
diff changeset
960 { "pmaddwd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
961 { "pmaxsw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
962 { "pmaxub", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
963 { "pminsw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
964 { "pminub", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
965 { "pmovmskb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
966 { "pmulhuw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
967 { "pmulhw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
968 { "pmullw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
969 { "pmuludq", Op_DstSrcMMX }, // also sse
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
970 { "pop", Op_DstW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
971 { "popa", Op_SizedStack }, // For intel this is always 16-bit
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
972 { "popad", Op_SizedStack }, // GAS doesn't accept 'popad' -- these clobber everything, but supposedly it would be used to preserve clobbered regs
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
973 { "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: 924
diff changeset
974 { "popfd", Op_SizedStack },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
975 { "por", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
976 { "prefetchnta", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
977 { "prefetcht0", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
978 { "prefetcht1", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
979 { "prefetcht2", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
980 { "psadbw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
981 { "pshufd", Op_DstSrcImmM },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
982 { "pshufhw", Op_DstSrcImmM },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
983 { "pshuflw", Op_DstSrcImmM },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
984 { "pshufw", Op_DstSrcImmM },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
985 { "pslld", Op_DstSrcMMX }, // immediate operands...
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
986 { "pslldq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
987 { "psllq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
988 { "psllw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
989 { "psrad", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
990 { "psraw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
991 { "psrld", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
992 { "psrldq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
993 { "psrlq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
994 { "psrlw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
995 { "psubb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
996 { "psubd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
997 { "psubq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
998 { "psubsb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
999 { "psubsw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1000 { "psubusb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1001 { "psubusw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1002 { "psubw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1003 { "punpckhbw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1004 { "punpckhdq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1005 { "punpckhqdq",Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1006 { "punpckhwd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1007 { "punpcklbw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1008 { "punpckldq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1009 { "punpcklqdq",Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1010 { "punpcklwd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1011 { "push", Op_push },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1012 { "pusha", Op_SizedStack },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1013 { "pushad", Op_SizedStack },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1014 { "pushf", Op_SizedStack },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1015 { "pushfd", Op_SizedStack },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1016 { "pxor", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1017 { "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: 924
diff changeset
1018 { "rcpps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1019 { "rcpss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1020 { "rcr", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1021 { "rdmsr", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1022 { "rdpmc", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1023 { "rdtsc", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1024 { "rep", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1025 { "repe", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1026 { "repne", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1027 { "repnz", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1028 { "repz", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1029 { "ret", Op_ret },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1030 { "retf", Op_retf },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1031 { "rol", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1032 { "ror", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1033 { "rsm", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1034 { "rsqrtps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1035 { "rsqrtss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1036 { "sahf", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1037 { "sal", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1038 { "sar", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1039 { "sbb", Op_UpdSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1040 { "scas", Op_scas },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1041 { "scasb", Op_scasX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1042 { "scasd", Op_scasX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1043 { "scasw", Op_scasX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1044 { "seta", Op_DstRMBNT }, // also gpr8
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1045 { "setae", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1046 { "setb", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1047 { "setbe", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1048 { "setc", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1049 { "sete", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1050 { "setg", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1051 { "setge", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1052 { "setl", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1053 { "setle", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1054 { "setna", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1055 { "setnae", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1056 { "setnb", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1057 { "setnbe", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1058 { "setnc", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1059 { "setne", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1060 { "setng", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1061 { "setnge", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1062 { "setnl", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1063 { "setnle", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1064 { "setno", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1065 { "setnp", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1066 { "setns", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1067 { "setnz", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1068 { "seto", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1069 { "setp", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1070 { "setpe", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1071 { "setpo", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1072 { "sets", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1073 { "setz", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1074 { "sfence", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1075 { "sgdt", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1076 { "shl", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1077 { "shld", Op_UpdSrcShft },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1078 { "shr", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1079 { "shrd", Op_UpdSrcShft },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1080 { "shufpd", Op_DstSrcImmS },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1081 { "shufps", Op_DstSrcImmS },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1082 { "sidt", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1083 { "sldt", Op_DstRMWNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1084 { "smsw", Op_DstRMWNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1085 { "sqrtpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1086 { "sqrtps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1087 { "sqrtsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1088 { "sqrtss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1089 { "stc", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1090 { "std", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1091 { "sti", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1092 { "stmxcsr",Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1093 { "stos", Op_stos },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1094 { "stosb", Op_stosX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1095 { "stosd", Op_stosX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1096 { "stosw", Op_stosX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1097 { "str", Op_DstMemNT }, // also r16
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1098 { "sub", Op_UpdSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1099 { "subpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1100 { "subps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1101 { "subsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1102 { "subss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1103 { "sysenter",Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1104 { "sysexit", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1105 { "test", Op_SrcSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1106 { "ucomisd", Op_SrcSrcSSEF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1107 { "ucomiss", Op_SrcSrcSSEF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1108 { "ud2", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1109 { "unpckhpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1110 { "unpckhps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1111 { "unpcklpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1112 { "unpcklps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1113 { "verr", Op_SrcMemNTF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1114 { "verw", Op_SrcMemNTF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1115 { "wait", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1116 { "wbinvd", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1117 { "wrmsr", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1118 { "xadd", Op_UpdUpdF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1119 { "xchg", Op_UpdUpd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1120 { "xlat", Op_xlat },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1121 { "xlatb", Op_0_AX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1122 { "xor", Op_DstSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1123 { "xorpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1124 { "xorps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1125 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1126
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1127 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1128 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1129 Default_Ptr = 0,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1130 Byte_Ptr = 1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1131 Short_Ptr = 2,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1132 Int_Ptr = 4,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1133 QWord_Ptr = 8,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1134 Float_Ptr = 4,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1135 Double_Ptr = 8,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1136 Extended_Ptr = 10,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1137 Near_Ptr = 98,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1138 Far_Ptr = 99,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1139 N_PtrTypes
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1140 } PtrType;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1141
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1142 static const int N_PtrNames = 8;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1143 static const char * ptrTypeNameTable[N_PtrNames] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1144 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1145 "word", "dword", "qword",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1146 "float", "double", "extended",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1147 "near", "far"
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1148 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1149
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1150 static Identifier * ptrTypeIdentTable[N_PtrNames];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1151 static PtrType ptrTypeValueTable[N_PtrNames] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1152 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1153 Short_Ptr, Int_Ptr, QWord_Ptr,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1154 Float_Ptr, Double_Ptr, Extended_Ptr,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1155 Near_Ptr, Far_Ptr
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1156 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1157
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1158 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1159 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1160 Opr_Invalid,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1161 Opr_Immediate,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1162 Opr_Reg,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1163 Opr_Mem
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1164 } OperandClass;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1165
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1166 /* kill inlining if we reference a local? */
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1167
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1168 /* DMD seems to allow only one 'symbol' per operand .. include __LOCAL_SIZE */
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1169
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1170 /* 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: 924
diff changeset
1171 if naked.. */
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1172
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1173 // mov eax, 4
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1174 // 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
1175 // -- 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
1176
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1177 static Token eof_tok;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1178 static Expression * Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1179 static Identifier * ident_seg;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1180
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1181 struct AsmProcessor
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1182 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1183 typedef struct
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1184 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1185 int inBracket;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1186 int hasBracket;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1187 int hasNumber;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1188 int isOffset;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1189
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1190 Reg segmentPrefix;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1191 Reg reg;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1192 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: 924
diff changeset
1193 Array symbolDisplacement; // array of expressions or..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1194 Reg baseReg;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1195 Reg indexReg;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1196 int scale;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1197
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1198 OperandClass cls;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1199 PtrType dataSize;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1200 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: 924
diff changeset
1201 } Operand;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1202
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1203 static const unsigned Max_Operands = 3;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1204
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1205 AsmStatement * stmt;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1206 Scope * sc;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1207
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1208 Token * token;
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1209 std::ostringstream insnTemplate;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1210
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1211 AsmOp op;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1212 AsmOpInfo * opInfo;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1213 Operand operands[Max_Operands];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1214 Identifier * opIdent;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1215 Operand * operand;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1216
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1217 AsmProcessor ( Scope * sc, AsmStatement * stmt )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1218 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1219 this->sc = sc;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1220 this->stmt = stmt;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1221 token = stmt->tokens;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1222
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1223 opInfo = NULL;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1224
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1225 if ( ! regInfo[0].ident )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1226 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1227 char buf[8], *p;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1228
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1229 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: 924
diff changeset
1230 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1231 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: 924
diff changeset
1232 for ( p = buf; *p; p++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1233 *p = std::tolower ( *p );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1234 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: 924
diff changeset
1235 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: 924
diff changeset
1236 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: 924
diff changeset
1237 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1238
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1239 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: 924
diff changeset
1240 ptrTypeIdentTable[i] = Lexer::idPool ( ptrTypeNameTable[i] );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1241
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1242 Handled = new Expression ( 0, TOKvoid, sizeof ( Expression ) );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1243
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1244 ident_seg = Lexer::idPool ( "seg" );
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1245
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1246 eof_tok.value = TOKeof;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1247 eof_tok.next = 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1248 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1249 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1250
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1251 void run()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1252 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1253 parse();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1254 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1255
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1256 void nextToken()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1257 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1258 if ( token->next )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1259 token = token->next;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1260 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1261 token = & eof_tok;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1262 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1263
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1264 Token * peekToken()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1265 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1266 if ( token->next )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1267 return token->next;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1268 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1269 return & eof_tok;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1270 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1271
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1272 void expectEnd()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1273 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1274 if ( token->value != TOKeof )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1275 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: 924
diff changeset
1276 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1277
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1278 void parse()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1279 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1280 op = parseOpcode();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1281
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1282 switch ( op )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1283 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1284 case Op_Align:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1285 doAlign();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1286 expectEnd();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1287 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1288 case Op_Even:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1289 doEven();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1290 expectEnd();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1291 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1292 case Op_Naked:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1293 doNaked();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1294 expectEnd();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1295 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1296 case Op_Invalid:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1297 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1298 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1299 if ( op >= Op_db && op <= Op_de )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1300 doData();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1301 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1302 doInstruction();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1303 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1304 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1305
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1306 AsmOp parseOpcode()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1307 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1308 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
1309
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1310 switch ( token->value )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1311 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1312 case TOKalign:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1313 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1314 return Op_Align;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1315 case TOKin:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1316 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1317 opIdent = Id::___in;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1318 return Op_in;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1319 case TOKint32: // "int"
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1320 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1321 opIdent = Id::__int;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1322 return Op_SrcImm;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1323 case TOKout:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1324 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1325 opIdent = Id::___out;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1326 return Op_out;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1327 case TOKidentifier:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1328 // search for mnemonic below
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1329 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1330 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1331 stmt->error ( "expected opcode" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1332 return Op_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1333 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1334
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1335 opIdent = token->ident;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1336 const char * opcode = token->ident->string;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1337
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1338 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1339
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1340 // %% okay to use bsearch?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1341 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: 924
diff changeset
1342 do
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1343 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1344 k = ( i + j ) / 2;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1345 l = strcmp ( opcode, opData[k].inMnemonic );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1346 if ( ! l )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1347 return opData[k].asmOp;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1348 else if ( l < 0 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1349 j = k;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1350 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1351 i = k + 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1352 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1353 while ( i != j );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1354
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1355 stmt->error ( "unknown opcode '%s'", opcode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1356
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1357 return Op_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1358 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1359
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1360 // 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: 924
diff changeset
1361 void doInstruction()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1362 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1363 bool ok = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1364 unsigned operand_i = 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1365
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1366 opInfo = & asmOpInfo[op];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1367 memset ( operands, 0, sizeof ( operands ) );
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1368
1092
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1369 if ( token->value == TOKeof && (op == Op_FMath0 ))
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1370 {
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1371 for (operand_i = 0; operand_i < 0; operand_i++)
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1372 {
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1373 operand = & operands[operand_i];
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1374 operand->reg = operand->baseReg = operand->indexReg =
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1375 operand->segmentPrefix = Reg_Invalid;
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1376 operand->cls = Opr_Reg;
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1377 if (operand_i == 0)
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1378 {
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1379 operand->reg = Reg_ST;
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1380 }
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1381 else
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1382 {
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1383 operand->reg = Reg_ST1;
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1384 }
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1385 operand->hasNumber = 0;
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1386 operand->constDisplacement = 0;
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1387 parseOperand();
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1388
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1389 if ( matchOperands ( operand_i ) )
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1390 {
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1391 AsmCode * asmcode = new AsmCode ( N_Regs );
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1392
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1393 if ( formatInstruction ( operand_i, asmcode ) )
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1394 stmt->asmcode = ( code * ) asmcode;
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1395 }
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1396
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1397 }
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1398 return;
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1399 }
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1400
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1401 while ( token->value != TOKeof )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1402 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1403 if ( operand_i < Max_Operands )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1404 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1405 operand = & operands[operand_i];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1406 operand->reg = operand->baseReg = operand->indexReg =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1407 operand->segmentPrefix = Reg_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1408 parseOperand();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1409 operand_i++;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1410 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1411 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1412 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1413 ok = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1414 stmt->error ( "too many operands for instruction" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1415 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1416 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1417
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1418 if ( token->value == TOKcomma )
1084
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
1419 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1420 nextToken();
1084
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
1421 }
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
1422 else if ( token->value == TOKint16 || token->value == TOKint32 )
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
1423 {
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
1424 //throw away the 'short' in "jle short label;". Works for 'long' also.
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
1425 operands[0] = operands[1];
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
1426 return;
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
1427 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1428 else if ( token->value != TOKeof )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1429 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1430 ok = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1431 stmt->error ( "expected comma after operand" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1432 return;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1433 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1434 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1435 // if (operand_i < opInfo->minOperands) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1436 // ok = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1437 // stmt->error("too few operands for instruction");
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1438 // }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1439
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1440 if ( matchOperands ( operand_i ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1441 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1442 AsmCode * asmcode = new AsmCode ( N_Regs );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1443
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1444 if ( formatInstruction ( operand_i, asmcode ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1445 stmt->asmcode = ( code * ) asmcode;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1446 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1447 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1448
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1449 void setAsmCode()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1450 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1451 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
1452 asmcode->insnTemplate = insnTemplate.str();
1109
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
1453 Logger::cout() << "insnTemplate = " << asmcode->insnTemplate << '\n';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1454 stmt->asmcode = ( code* ) asmcode;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1455 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1456
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1457 // note: doesn't update AsmOp op
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1458 bool matchOperands ( unsigned nOperands )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1459 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1460 bool wrong_number = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1461
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1462 for ( unsigned i = 0; i < nOperands; i++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1463 classifyOperand ( & operands[i] );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1464
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1465 while ( 1 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1466 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1467 if ( nOperands == opInfo->nOperands() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1468 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1469 wrong_number = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1470 /* 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: 924
diff changeset
1471 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: 924
diff changeset
1472 Op_FCmpP/Op_FCmpP1 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1473 for ( unsigned i = 0; i < nOperands; i++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1474 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1475 Operand * operand = & operands[i];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1476
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1477 switch ( opInfo->operands[i] & Opr_ClassMask )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1478 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1479 case OprC_Mem: // no FPMem currently
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1480 if ( operand->cls != Opr_Mem )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1481 goto no_match;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1482 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1483 case OprC_RFP:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1484 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: 924
diff changeset
1485 goto no_match;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1486 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1487 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1488 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1489 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1490 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1491
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1492 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1493 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1494 no_match:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1495 if ( opInfo->linkType == Next_Form )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1496 opInfo = & asmOpInfo[ op = ( AsmOp ) opInfo->link ];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1497 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1498 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1499 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1500 if ( wrong_number )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1501 stmt->error ( "wrong number of operands" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1502 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1503 stmt->error ( "wrong operand types" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1504 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1505 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1506
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1507 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: 924
diff changeset
1508 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1509 if ( sc->func->naked )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1510 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1511 switch ( type )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1512 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1513 case Arg_Integer:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1514 if ( e->type->isunsigned() )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1515 insnTemplate << "$" << e->toUInteger();
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1516 else
1105
cdb7e1167803 - Fixed building tango-user-ldc on x86-32.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1102
diff changeset
1517 insnTemplate << "$" << (sinteger_t)e->toInteger();
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1518 break;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1519
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1520 case Arg_Pointer:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1521 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: 924
diff changeset
1522 break;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1523
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1524 case Arg_Memory:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1525 if ( e->op == TOKvar )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1526 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1527 VarExp* v = ( VarExp* ) e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1528 if ( VarDeclaration* vd = v->var->isVarDeclaration() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1529 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1530 if ( !vd->isDataseg() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1531 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1532 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: 924
diff changeset
1533 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1534 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1535
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1536 // osx needs an extra underscore
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1537 if ( global.params.os == OSMacOSX )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1538 insnTemplate << "_";
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1539
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1540 // print out the mangle
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1541 insnTemplate << vd->mangle();
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1542 vd->nakedUse = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1543 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1544 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1545 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1546 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: 924
diff changeset
1547 break;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1548
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1549 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1550 assert ( 0 && "asm unsupported arg" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1551 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1552 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1553 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1554 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1555 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1556 insnTemplate << fmt
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1557 << "<<" << (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
1558 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: 924
diff changeset
1559 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1560 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1561 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: 924
diff changeset
1562 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1563 assert ( !sc->func->naked );
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1564 insnTemplate << fmtpre
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1565 << "<<" << (mode==Mode_Input ? "in" : "out") << ">>"
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1566 << fmtpost;
1101
8bf8b058944a Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents: 1100
diff changeset
1567 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: 924
diff changeset
1568 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1569
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1570 void addLabel ( char* id )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1571 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1572 insnTemplate << sc->func->mangle() << "_" << id;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1573 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1574
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1575 /* 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: 924
diff changeset
1576 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: 924
diff changeset
1577 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: 924
diff changeset
1578 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: 924
diff changeset
1579 void classifyOperand ( Operand * operand )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1580 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1581 operand->cls = classifyOperand1 ( operand );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1582 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1583
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1584 OperandClass classifyOperand1 ( Operand * operand )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1585 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1586 bool is_localsize = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1587 bool really_have_symbol = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1588
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1589 if ( operand->symbolDisplacement.dim )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1590 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1591 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: 924
diff changeset
1592 really_have_symbol = ! is_localsize;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1593 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1594
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1595 if ( operand->isOffset && ! operand->hasBracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1596 return Opr_Immediate;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1597
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1598 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: 924
diff changeset
1599 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1600 if ( operand->reg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1601 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1602 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1603 return Opr_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1604 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1605
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1606 return Opr_Mem;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1607 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1608
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1609 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: 924
diff changeset
1610 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1611 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1612 return Opr_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1613 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1614
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1615 if ( operand->segmentPrefix != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1616 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1617 if ( operand->reg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1618 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1619 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1620 return Opr_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1621 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1622
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1623 return Opr_Mem;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1624 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1625
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1626 if ( operand->reg != Reg_Invalid && ! operand->hasNumber )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1627 return Opr_Reg;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1628
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1629 // should check immediate given (operand->hasNumber);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1630 //
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1631 if ( operand->hasNumber || is_localsize )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1632 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1633 // 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: 924
diff changeset
1634 if ( operand->dataSize == Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1635 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1636 if ( operand->constDisplacement < 0x100 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1637 operand->dataSize = Byte_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1638 else if ( operand->constDisplacement < 0x10000 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1639 operand->dataSize = Short_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1640 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1641 operand->dataSize = Int_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1642 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1643 return Opr_Immediate;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1644 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1645
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1646 // probably a bug,?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1647 stmt->error ( "invalid operand" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1648 return Opr_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1649 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1650
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1651 void writeReg ( Reg reg )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1652 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1653 insnTemplate << "%" << regInfo[reg].gccName;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1654 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1655
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1656 bool opTakesLabel()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1657 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1658 switch ( op )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1659 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1660 case Op_Branch:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1661 case Op_CBranch:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1662 case Op_Loop:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1663 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1664 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1665 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1666 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1667 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1668
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1669 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
1670 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1671 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
1672 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1673 case Byte_NoType:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1674 return ptrtype == Byte_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1675 case Word_Types:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1676 if ( ptrtype == Byte_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1677 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1678 // drop through
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1679 case Int_Types:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1680 switch ( ptrtype )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1681 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1682 case Byte_Ptr: type_char = 'b'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1683 case Short_Ptr: type_char = 'w'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1684 case Int_Ptr: type_char = 'l'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1685 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1686 // %% these may be too strict
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1687 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1688 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1689 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1690 case FPInt_Types:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1691 switch ( ptrtype )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1692 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1693 case Short_Ptr: type_char = 0; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1694 case Int_Ptr: type_char = 'l'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1695 case QWord_Ptr: type_char = 'q'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1696 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1697 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1698 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1699 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1700 case FP_Types:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1701 switch ( ptrtype )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1702 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1703 case Float_Ptr: type_char = 's'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1704 case Double_Ptr: type_char = 'l'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1705 case Extended_Ptr: type_char = 't'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1706 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1707 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1708 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1709 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1710 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1711 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1712 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1713 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1714 }
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
1715
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1716 // also set impl clobbers
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1717 bool formatInstruction ( int nOperands, AsmCode * asmcode )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1718 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1719 const char *fmt;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1720 const char *mnemonic;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1721 char type_char = 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1722 bool use_star;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1723 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
1724
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1725 insnTemplate.str("");
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1726 // %% todo: special case for something..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1727 if ( opInfo->linkType == Out_Mnemonic )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1728 mnemonic = alternateMnemonics[opInfo->link];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1729 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1730 mnemonic = opIdent->string;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1731
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1732 if ( opInfo->needsType )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1733 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1734 PtrType exact_type = Default_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1735 PtrType min_type = Default_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1736 PtrType hint_type = Default_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1737
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1738 /* 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: 924
diff changeset
1739 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
1740 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1741 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: 924
diff changeset
1742 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: 924
diff changeset
1743 case FPInt_Types:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1744 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: 924
diff changeset
1745 min_type = Int_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1746 else // compare, load, store
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1747 min_type = Short_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1748 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1749 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: 924
diff changeset
1750 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1751 if ( op == Op_push && operands[0].cls == Opr_Immediate )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1752 min_type = Int_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1753
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1754 for ( int i = 0; i < nOperands; i++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1755 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1756 if ( hint_type == Default_Ptr &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1757 ! ( opInfo->operands[i] & Opr_NoType ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1758 hint_type = operands[i].dataSizeHint;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1759
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1760 if ( ( opInfo->operands[i] & Opr_NoType ) ||
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1761 operands[i].dataSize == Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1762 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1763 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
1764 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1765 min_type = operands[i].dataSize > min_type ?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1766 operands[i].dataSize : min_type;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1767 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1768 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1769 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1770 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
1771 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
1772 }
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
1773 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1774
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1775 bool type_ok;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1776 if ( exact_type == Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1777 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1778 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: 924
diff changeset
1779 if ( ! type_ok )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1780 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: 924
diff changeset
1781 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1782 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1783 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: 924
diff changeset
1784
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1785 if ( ! type_ok )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1786 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1787 stmt->error ( "invalid operand size" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1788 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1789 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1790 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1791 else if ( op == Op_Branch )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1792 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1793 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
1794 insnTemplate << 'l';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1795 }
1087
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1796 else if ( op == Op_fxch || op == Op_FfdRR_P || op == Op_FidR_P )
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1797 {
1087
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1798 if ( operands[0].cls == Opr_Mem && op == Op_FidR_P )
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1799 {
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1800 nOperands = 1;
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1801 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1802 // gas won't accept the two-operand form
1087
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1803 else if ( operands[1].cls == Opr_Reg && operands[1].reg == Reg_ST )
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1804 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1805 nOperands = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1806 }
1087
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1807 else if ( operands[1].cls == Opr_Mem && operands[1].reg == Reg_ST || operands[0].cls == Opr_Mem )
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1808 {
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1809 nOperands = 1;
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1810 }
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1811 else if ( operands[0].cls == Opr_Reg && (operands[0].reg == Reg_ST || operands[0].reg == Reg_ST1 ))
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1812 {
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1813 //fix previous update to allow single operand form of fstp
b1d75bf46ffa fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1084
diff changeset
1814 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1815 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1816 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1817 stmt->error ( "invalid operands" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1818 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1819 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1820 }
1092
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1821 else if ( op == Op_FMath0 || op == Op_FdST0ST1 )
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1822 {
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1823 operands[0].cls = Opr_Reg;
1301
1e30cc395d2e fix wrong arg order for fmul/fadd
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1190
diff changeset
1824 operands[0].reg = Reg_ST1;
1092
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1825 operands[1].cls = Opr_Reg;
1301
1e30cc395d2e fix wrong arg order for fmul/fadd
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1190
diff changeset
1826 operands[1].reg = Reg_ST;
1092
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1827 nOperands = 2;
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
1828 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1829
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1830 switch ( op )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1831 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1832 case Op_SizedStack:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1833 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1834 int mlen = strlen ( mnemonic );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1835 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
1836 insnTemplate.write(mnemonic, mlen-1);
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1837 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1838 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1839 insnTemplate << mnemonic << 'w';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1840 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1841 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1842 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1843 case Op_cmpsd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1844 case Op_insX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1845 case Op_lodsX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1846 case Op_movsd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1847 case Op_outsX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1848 case Op_scasX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1849 case Op_stosX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1850 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1851 int mlen = strlen ( mnemonic );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1852 if ( mnemonic[mlen-1] == 'd' )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1853 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1854 insnTemplate.write(mnemonic, mlen-1) << 'l';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1855 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1856 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1857 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1858 insnTemplate << mnemonic;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1859 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1860 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1861 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1862 case Op_movsx:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1863 case Op_movzx:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1864 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1865 char tc_1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1866 int mlen = strlen ( mnemonic );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1867 PtrType op1_size = operands[1].dataSize;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1868 if ( op1_size == Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1869 op1_size = operands[1].dataSizeHint;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1870 // Need type char for source arg
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1871 switch ( op1_size )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1872 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1873 case Byte_Ptr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1874 case Default_Ptr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1875 tc_1 = 'b';
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1876 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1877 case Short_Ptr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1878 tc_1 = 'w';
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1879 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1880 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1881 stmt->error ( "invalid operand size/type" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1882 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1883 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1884 assert ( type_char != 0 );
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1885 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: 924
diff changeset
1886 }
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
1887 break;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1888 default:
1302
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1889 // special case fdiv, fsub: see dmd 840, ldc 256
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1890 if (strncmp(mnemonic, "fsub", 4) == 0 ||
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1891 strncmp(mnemonic, "fdiv", 4) == 0)
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1892 {
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1893 // replace:
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1894 // 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
1895 if (mnemonic[4] == 'r')
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1896 {
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1897 insnTemplate.write(mnemonic, 4);
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1898 insnTemplate.write(mnemonic+5, strlen(mnemonic)-5);
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1899 }
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1900 else
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1901 {
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1902 insnTemplate.write(mnemonic, 4) << "r";
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1903 insnTemplate.write(mnemonic+4, strlen(mnemonic)-4);
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1904 }
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1905 }
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1906 else
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1907 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1908 insnTemplate << mnemonic;
1302
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1909 }
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1910 if ( type_char )
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1911 insnTemplate << type_char;
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1912 break;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1913 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1914
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1915 switch ( opInfo->implicitClobbers & Clb_DXAX_Mask )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1916 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1917 case Clb_SizeAX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1918 case Clb_EAX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1919 asmcode->regs[Reg_EAX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1920 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1921 case Clb_SizeDXAX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1922 asmcode->regs[Reg_EAX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1923 if ( type_char != 'b' )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1924 asmcode->regs[Reg_EDX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1925 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1926 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1927 // nothing
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1928 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1929 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1930
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1931 if ( opInfo->implicitClobbers & Clb_DI )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1932 asmcode->regs[Reg_EDI] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1933 if ( opInfo->implicitClobbers & Clb_SI )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1934 asmcode->regs[Reg_ESI] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1935 if ( opInfo->implicitClobbers & Clb_CX )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1936 asmcode->regs[Reg_ECX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1937 if ( opInfo->implicitClobbers & Clb_SP )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1938 asmcode->regs[Reg_ESP] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1939 if ( opInfo->implicitClobbers & Clb_ST )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1940 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1941 /* 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: 924
diff changeset
1942 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: 924
diff changeset
1943 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: 924
diff changeset
1944 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: 924
diff changeset
1945 all FP prevents incorrect code generation. */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1946 asmcode->regs[Reg_ST] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1947 asmcode->regs[Reg_ST1] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1948 asmcode->regs[Reg_ST2] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1949 asmcode->regs[Reg_ST3] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1950 asmcode->regs[Reg_ST4] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1951 asmcode->regs[Reg_ST5] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1952 asmcode->regs[Reg_ST6] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1953 asmcode->regs[Reg_ST7] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1954 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1955 if ( opInfo->implicitClobbers & Clb_Flags )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1956 asmcode->regs[Reg_EFLAGS] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1957 if ( op == Op_cpuid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1958 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1959 asmcode->regs[Reg_EAX] = true;
1095
d6bd818212de Add missing EBX clobber to CPUID asm instruction.
Frits van Bommel <fvbommel wxs.nl>
parents: 1094
diff changeset
1960 asmcode->regs[Reg_EBX] = true;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1961 asmcode->regs[Reg_ECX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1962 asmcode->regs[Reg_EDX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1963 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1964
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1965 insnTemplate << ' ';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1966 for ( int i__ = 0; i__ < nOperands; i__++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1967 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1968 int i;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1969 if ( i__ != 0 )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1970 insnTemplate << ", ";
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1971
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1972 fmt = "$";
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1973
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1974 switch ( op )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1975 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1976 case Op_mul:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1977 // 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: 924
diff changeset
1978 i__ = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1979 // drop through
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1980 case Op_bound:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1981 case Op_enter:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1982 i = i__;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1983 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1984 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1985 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: 924
diff changeset
1986 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1987 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1988 operand = & operands[ i ];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1989
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1990 switch ( operand->cls )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1991 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1992 case Opr_Immediate:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1993 // for implementing offset:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1994 // $var + $7 // fails
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1995 // $var + 7 // ok
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1996 // $7 + $var // ok
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1997
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1998 // DMD doesn't seem to allow this
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
1999 /*
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2000 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: 924
diff changeset
2001 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: 924
diff changeset
2002 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2003 if ( opTakesLabel() /*opInfo->takesLabel()*/ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2004 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2005 // "relative addressing not allowed in branch instructions" ..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2006 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: 924
diff changeset
2007 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2008 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2009
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2010 if ( operand->symbolDisplacement.dim &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2011 isLocalSize ( ( Expression * ) operand->symbolDisplacement.data[0] ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2012 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2013 // 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: 924
diff changeset
2014 // should do this in slotexp..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2015 addOperand ( "$", Arg_LocalSize,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2016 ( Expression * ) operand->symbolDisplacement.data[0], asmcode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2017 if ( operand->constDisplacement )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2018 insnTemplate << '+';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2019 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2020 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2021 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2022
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2023 if ( operand->symbolDisplacement.dim )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2024 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2025 fmt = "$a";
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2026 addOperand ( "$", Arg_Pointer,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2027 ( Expression * ) operand->symbolDisplacement.data[0],
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2028 asmcode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2029
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2030 if ( operand->constDisplacement )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2031 insnTemplate << '+';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2032 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2033 // skip the addOperand(fmt, Arg_Integer...) below
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2034 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2035 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2036 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: 924
diff changeset
2037 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2038 case Opr_Reg:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2039 if ( opInfo->operands[i] & Opr_Dest )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2040 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2041 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: 924
diff changeset
2042 if ( clbr_reg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2043 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2044 asmcode->regs[clbr_reg] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2045 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2046 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2047 if ( opTakesLabel() /*opInfo->takesLabel()*/ )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2048 insnTemplate << '*';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2049 writeReg ( operand->reg );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2050 /*
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2051 insnTemplate << "%";
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2052 insnTemplate << regInfo[operand->reg].name;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2053 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2054 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2055 case Opr_Mem:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2056 // 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: 924
diff changeset
2057 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: 924
diff changeset
2058 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2059 mode = Mode_Update;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2060 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2061 else if ( opInfo->operands[i] & Opr_Dest )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2062 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2063 mode = Mode_Output;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2064 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2065 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2066 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2067 mode = Mode_Input;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2068 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2069
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2070 use_star = opTakesLabel();//opInfo->takesLabel();
1094
fa20521cbb13 Change faulty offset for asm in Cache.d (ie. change "-20(%rbp)+4)" to
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1092
diff changeset
2071
1109
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2072 if (Logger::enabled()) {
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2073 Logger::cout() << "Opr_Mem\n";
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2074 LOG_SCOPE
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2075 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: 1106
diff changeset
2076 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: 1106
diff changeset
2077 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: 1106
diff changeset
2078 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: 1106
diff changeset
2079 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: 1106
diff changeset
2080 Logger::cout() << "symbolDisplacement[" << i << "] = " << expr->toChars() << '\n';
1097
4450834402e2 Fix FS:4 problem for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1095
diff changeset
2081 }
1094
fa20521cbb13 Change faulty offset for asm in Cache.d (ie. change "-20(%rbp)+4)" to
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1092
diff changeset
2082 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2083 if ( operand->segmentPrefix != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2084 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2085 writeReg ( operand->segmentPrefix );
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: 924
diff changeset
2087 }
1109
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2088 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: 1106
diff changeset
2089 || operand->constDisplacement )
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2090 {
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2091 insnTemplate << operand->constDisplacement;
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2092 if ( operand->symbolDisplacement.dim )
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2093 {
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2094 insnTemplate << '+';
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2095 }
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2096 operand->constDisplacement = 0;
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2097 //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: 1106
diff changeset
2098 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: 1106
diff changeset
2099 asmcode->clobbersMemory = 1;
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2100 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2101 if ( operand->symbolDisplacement.dim )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2102 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2103 Expression * e = ( Expression * ) operand->symbolDisplacement.data[0];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2104 Declaration * decl = 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2105
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2106 if ( e->op == TOKvar )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2107 decl = ( ( VarExp * ) e )->var;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2108
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2109 if ( operand->baseReg != Reg_Invalid &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2110 decl && ! decl->isDataseg() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2111 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2112
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2113 // 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
2114
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2115 /* 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: 924
diff changeset
2116 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: 924
diff changeset
2117
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2118 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: 924
diff changeset
2119 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: 924
diff changeset
2120 the stack offset.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2121 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2122
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2123 if ( operand->indexReg == Reg_Invalid &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2124 decl->isVarDeclaration() &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2125 ( ( operand->baseReg == Reg_EBP && ! sc->func->naked ) ||
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2126 ( operand->baseReg == Reg_ESP && sc->func->naked ) ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2127 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2128
1055
5066ba0c9783 Apply [1053] to x86-32 asm as well.
Frits van Bommel <fvbommel wxs.nl>
parents: 944
diff changeset
2129 e = new AddrExp ( 0, e );
5066ba0c9783 Apply [1053] to x86-32 asm as well.
Frits van Bommel <fvbommel wxs.nl>
parents: 944
diff changeset
2130 e->type = decl->type->pointerTo();
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2131
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2132 #if !IN_LLVM
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2133 /* 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: 924
diff changeset
2134 if ( sc->func->naked )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2135 operand->constDisplacement += 4;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2136
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2137 if ( operand->constDisplacement )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2138 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2139 e = new AddExp ( 0, e,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2140 new IntegerExp ( 0, operand->constDisplacement,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2141 Type::tint32 ) );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2142 e->type = decl->type->pointerTo();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2143 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2144 e = new PtrExp ( 0, e );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2145 e->type = decl->type;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2146 #endif
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2147 operand->constDisplacement = 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2148 operand->baseReg = Reg_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2149
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2150 addOperand ( fmt, Arg_Memory, e, asmcode, mode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2151
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2152 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2153 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2154 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2155 // FIXME: what is this ?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2156 addOperand2 ( "${",":a}", Arg_FrameRelative, e, asmcode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2157 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2158 if ( opInfo->operands[i] & Opr_Dest )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2159 asmcode->clobbersMemory = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2160 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2161 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2162 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2163 // Plain memory reference to variable
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2164
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2165 /* 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: 924
diff changeset
2166 by always using the "m" contraint.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2167
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2168 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: 924
diff changeset
2169 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: 924
diff changeset
2170 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2171 if ( isDollar ( e ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2172 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2173 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: 924
diff changeset
2174 asmcode->dollarLabel = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2175 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2176 else if ( e->op == TOKdsymbol )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2177 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2178 LabelDsymbol * lbl = ( LabelDsymbol * ) ( ( DsymbolExp * ) e )->s;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2179 stmt->isBranchToLabel = lbl->ident;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2180
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2181 use_star = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2182 addLabel ( lbl->ident->toChars() );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2183 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2184 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: 924
diff changeset
2185 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2186 use_star = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2187 // simply write out the mangle
1190
ea7b8b6c96c0 Some more fixups for mingw -- missing underscores
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1109
diff changeset
2188 // on osx and mingw, prepend extra _
ea7b8b6c96c0 Some more fixups for mingw -- missing underscores
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1109
diff changeset
2189 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
2190 insnTemplate << "_";
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2191 insnTemplate << decl->mangle();
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2192 // addOperand2("${", ":c}", Arg_Pointer, e, asmcode);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2193 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2194 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2195 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2196 if ( use_star )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2197 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2198 insnTemplate << '*';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2199 use_star = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2200 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2201
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2202 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: 924
diff changeset
2203 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2204 Type* tt = e->type->pointerTo();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2205 e = new AddrExp ( 0, e );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2206 e->type = tt;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2207 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2208
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2209 addOperand ( fmt, Arg_Memory, e, asmcode, mode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2210 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2211 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2212 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2213 if ( use_star )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2214 insnTemplate << '*';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2215 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: 924
diff changeset
2216 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2217 insnTemplate << '(';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2218 if ( operand->baseReg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2219 writeReg ( operand->baseReg );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2220 if ( operand->indexReg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2221 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2222 insnTemplate << ',';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2223 writeReg ( operand->indexReg );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2224 if ( operand->scale )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2225 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2226 insnTemplate << "," << operand->scale;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2227 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2228 }
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2229 insnTemplate << ')';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2230 if ( opInfo->operands[i] & Opr_Dest )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2231 asmcode->clobbersMemory = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2232 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2233 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2234 case Opr_Invalid:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2235 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2236 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2237 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2238
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2239 asmcode->insnTemplate = insnTemplate.str();
1109
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1106
diff changeset
2240 Logger::cout() << "insnTemplate = " << asmcode->insnTemplate << '\n';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2241 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2242 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2243
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2244 bool isIntExp ( Expression * exp )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2245 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2246 if ( exp->op == TOKint64 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2247 return 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2248 if ( exp->op == TOKvar )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2249 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2250 Declaration * v = ( ( VarExp * ) exp )->var;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2251 if ( v->isConst() && v->type->isintegral() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2252 return 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2253 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2254 return 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2255 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2256 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: 924
diff changeset
2257 bool isLocalSize ( Expression * exp )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2258 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2259 // cleanup: make a static var
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2260 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: 924
diff changeset
2261 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2262 bool isDollar ( Expression * exp )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2263 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2264 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: 924
diff changeset
2265 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2266
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2267 Expression * newRegExp ( int regno )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2268 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2269 IntegerExp * e = new IntegerExp ( regno );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2270 e->op = TOKmod;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2271 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2272 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2273
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2274 Expression * newIntExp ( int v /* %% type */ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2275 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2276 // Only handles 32-bit numbers as this is IA-32.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2277 return new IntegerExp ( stmt->loc, v, Type::tint32 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2278 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2279
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2280 void slotExp ( Expression * exp )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2281 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2282 /*
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2283 if offset, make a note
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2284
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2285 if integer, add to immediate
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2286 if reg:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2287 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: 924
diff changeset
2288 if in bracket:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2289 if not base, set base
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2290 if not index, set index
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2291 else, error
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2292 if symbol:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2293 set symbol field
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2294 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2295
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2296 bool is_offset = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2297 if ( exp->op == TOKaddress )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2298 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2299 exp = ( ( AddrExp * ) exp )->e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2300 is_offset = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2301 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2302
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2303 if ( isIntExp ( exp ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2304 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2305 if ( is_offset )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2306 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2307 operand->constDisplacement += exp->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2308 if ( ! operand->inBracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2309 operand->hasNumber = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2310 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2311 else if ( isRegExp ( exp ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2312 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2313 if ( is_offset )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2314 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2315 if ( ! operand->inBracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2316 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2317 if ( operand->reg == Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2318 operand->reg = ( Reg ) exp->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2319 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2320 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: 924
diff changeset
2321 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2322 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2323 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2324 if ( operand->baseReg == Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2325 operand->baseReg = ( Reg ) exp->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2326 else if ( operand->indexReg == Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2327 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2328 operand->indexReg = ( Reg ) exp->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2329 operand->scale = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2330 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2331 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2332 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2333 stmt->error ( "too many registers memory operand" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2334 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2335 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2336 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2337 else if ( exp->op == TOKvar )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2338 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2339 VarDeclaration * v = ( ( VarExp * ) exp )->var->isVarDeclaration();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2340
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2341 if ( v && v->storage_class & STCfield )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2342 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2343 operand->constDisplacement += v->offset;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2344 if ( ! operand->inBracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2345 operand->hasNumber = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2346 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2347 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2348 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2349 if ( v && v->type->isscalar() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2350 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2351 // 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: 924
diff changeset
2352 TY ty = v->type->toBasetype()->ty;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2353 operand->dataSizeHint = ty == Tfloat80 || ty == Timaginary80 ?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2354 Extended_Ptr : ( PtrType ) v->type->size ( 0 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2355 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2356
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2357 if ( ! operand->symbolDisplacement.dim )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2358 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2359 if ( is_offset && ! operand->inBracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2360 operand->isOffset = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2361 operand->symbolDisplacement.push ( exp );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2362 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2363 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2364 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2365 stmt->error ( "too many symbols in operand" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2366 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2367 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2368 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2369 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: 924
diff changeset
2370 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2371 // %% 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: 924
diff changeset
2372 // change to addSymbolDisp(e)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2373 if ( ! operand->symbolDisplacement.dim )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2374 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2375 operand->symbolDisplacement.push ( exp );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2376 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2377 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2378 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2379 stmt->error ( "too many symbols in operand" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2380 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2381 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2382 else if ( exp == Handled )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2383 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2384 // nothing
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2385 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2386 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2387 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2388 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
2389 }
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
2390 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2391
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2392 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
2393 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2394 // %% report operand number
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2395 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
2396 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2397
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2398 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: 924
diff changeset
2399 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2400 Expression * e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2401 if ( isIntExp ( e1 ) && ( ! e2 || isIntExp ( e2 ) ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2402 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2403 switch ( op )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2404 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2405 case TOKadd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2406 if ( e2 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2407 e = new AddExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2408 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2409 e = e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2410 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2411 case TOKmin:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2412 if ( e2 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2413 e = new MinExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2414 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2415 e = new NegExp ( stmt->loc, e1 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2416 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2417 case TOKmul:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2418 e = new MulExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2419 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2420 case TOKdiv:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2421 e = new DivExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2422 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2423 case TOKmod:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2424 e = new ModExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2425 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2426 case TOKshl:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2427 e = new ShlExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2428 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2429 case TOKshr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2430 e = new ShrExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2431 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2432 case TOKushr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2433 e = new UshrExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2434 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2435 case TOKnot:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2436 e = new NotExp ( stmt->loc, e1 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2437 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2438 case TOKtilde:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2439 e = new ComExp ( stmt->loc, e1 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2440 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2441 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2442 assert ( 0 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2443 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2444 e = e->semantic ( sc );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2445 return e->optimize ( WANTvalue | WANTinterpret );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2446 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2447 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2448 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2449 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: 924
diff changeset
2450 return newIntExp ( 0 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2451 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2452 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2453
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2454 void parseOperand()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2455 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2456 Expression * exp = parseAsmExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2457 slotExp ( exp );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2458 if ( isRegExp ( exp ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2459 operand->dataSize = ( PtrType ) regInfo[exp->toInteger() ].size;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2460 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2461
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2462 Expression * parseAsmExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2463 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2464 return parseShiftExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2465 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2466
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2467 Expression * parseShiftExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2468 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2469 Expression * e1 = parseAddExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2470 Expression * e2;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2471
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2472 while ( 1 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2473 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2474 TOK tv = token->value;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2475 switch ( tv )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2476 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2477 case TOKshl:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2478 case TOKshr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2479 case TOKushr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2480 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2481 e2 = parseAddExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2482 e1 = intOp ( tv, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2483 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2484 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2485 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2486 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2487 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2488 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2489 return e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2490 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2491
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2492 Expression * parseAddExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2493 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2494 Expression * e1 = parseMultExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2495 Expression * e2;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2496
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2497 while ( 1 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2498 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2499 TOK tv = token->value;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2500 switch ( tv )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2501 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2502 case TOKadd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2503 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2504 e2 = parseMultExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2505 if ( isIntExp ( e1 ) && isIntExp ( e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2506 e1 = intOp ( tv, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2507 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2508 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2509 slotExp ( e1 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2510 slotExp ( e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2511 e1 = Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2512 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2513 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2514 case TOKmin:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2515 // Note: no support for symbol address difference
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2516 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2517 e2 = parseMultExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2518 if ( isIntExp ( e1 ) && isIntExp ( e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2519 e1 = intOp ( tv, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2520 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2521 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2522 slotExp ( e1 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2523 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: 924
diff changeset
2524 slotExp ( e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2525 e1 = Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2526 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2527 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2528 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2529 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2530 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2531 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2532 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2533 return e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2534 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2535
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2536 bool tryScale ( Expression * e1, Expression * e2 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2537 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2538 Expression * et;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2539 if ( isIntExp ( e1 ) && isRegExp ( e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2540 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2541 et = e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2542 e1 = e2;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2543 e2 = et;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2544 goto do_scale;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2545 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2546 else if ( isRegExp ( e1 ) && isIntExp ( e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2547 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2548 do_scale:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2549 if ( ! operand->inBracket )
221
68687d8c3e9a [svn r237] some inline asm output now seems to work, see tangotests/asm2.d
lindquist
parents: 220
diff changeset
2550 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2551 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
2552 }
222
251548c1035d [svn r238] use *m for memory input constraints and pass in their address
ChristianK
parents: 221
diff changeset
2553
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2554 if ( operand->scale || operand->indexReg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2555 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2556 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2557 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2558 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2559
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2560 operand->indexReg = ( Reg ) e1->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2561 operand->scale = e2->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2562 switch ( operand->scale )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2563 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2564 case 1:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2565 case 2:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2566 case 4:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2567 case 8:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2568 // ok; do nothing
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2569 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2570 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2571 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: 924
diff changeset
2572 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
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: 924
diff changeset
2575 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2576 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2577 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2578 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2579
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2580 Expression * parseMultExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2581 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2582 Expression * e1 = parseBrExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2583 Expression * e2;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2584
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2585 while ( 1 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2586 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2587 TOK tv = token->value;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2588 switch ( tv )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2589 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2590 case TOKmul:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2591 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2592 e2 = parseMultExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2593 if ( isIntExp ( e1 ) && isIntExp ( e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2594 e1 = intOp ( tv, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2595 else if ( tryScale ( e1,e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2596 e1 = Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2597 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2598 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2599 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2600 case TOKdiv:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2601 case TOKmod:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2602 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2603 e2 = parseMultExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2604 e1 = intOp ( tv, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2605 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2606 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2607 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2608 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2609 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2610 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2611 return e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2612 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2613
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2614 Expression * parseBrExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2615 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2616 // %% check (why is bracket lower precends..)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2617 // 3+4[eax] -> 3 + (4 [EAX]) ..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2618
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2619 // 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: 924
diff changeset
2620 // the spec'd syntax
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2621 Expression * e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2622
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2623 if ( token->value == TOKlbracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2624 e = Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2625 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2626 e = parseUnaExp();
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2627
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2628 // DMD allows multiple bracket expressions.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2629 while ( token->value == TOKlbracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2630 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2631 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2632
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2633 operand->inBracket = operand->hasBracket = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2634 slotExp ( parseAsmExp() );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2635 operand->inBracket = 0;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2636
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2637 if ( token->value == TOKrbracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2638 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2639 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2640 stmt->error ( "missing ']'" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2641 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2642
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2643 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2644 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2645
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2646 PtrType isPtrType ( Token * tok )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2647 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2648 switch ( tok->value )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2649 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2650 case TOKint8: return Byte_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2651 case TOKint16: return Short_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2652 case TOKint32: return Int_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2653 // 'long ptr' isn't accepted?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2654 case TOKfloat32: return Float_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2655 case TOKfloat64: return Double_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2656 case TOKfloat80: return Extended_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2657 case TOKidentifier:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2658 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: 924
diff changeset
2659 if ( tok->ident == ptrTypeIdentTable[i] )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2660 return ptrTypeValueTable[i];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2661 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2662 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2663 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2664 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2665 return Default_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2666 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2667
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2668 Expression * parseUnaExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2669 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2670 Expression * e = NULL;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2671 PtrType ptr_type;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2672
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2673 // First, check for type prefix.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2674 if ( token->value != TOKeof &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2675 peekToken()->value == TOKidentifier &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2676 peekToken()->ident == Id::ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2677 {
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2678
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2679 ptr_type = isPtrType ( token );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2680 if ( ptr_type != Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2681 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2682 if ( operand->dataSize == Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2683 operand->dataSize = ptr_type;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2684 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2685 stmt->error ( "multiple specifications of operand size" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2686 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2687 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2688 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: 924
diff changeset
2689 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2690 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2691 return parseAsmExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2692 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2693
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2694 TOK tv = token->value;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2695 switch ( tv )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2696 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2697 case TOKidentifier:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2698 if ( token->ident == ident_seg )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2699 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2700 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2701 stmt->error ( "'seg' not supported" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2702 e = parseAsmExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2703 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2704 else if ( token->ident == Id::offset ||
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2705 token->ident == Id::offsetof )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2706 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2707 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: 924
diff changeset
2708 stmt->error ( "offset deprecated, use offsetof" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2709 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2710 e = parseAsmExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2711 e = new AddrExp ( stmt->loc, e );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2712 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2713 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2714 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2715 // primary exp
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2716 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2717 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2718 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2719 case TOKadd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2720 case TOKmin:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2721 case TOKnot:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2722 case TOKtilde:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2723 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2724 e = parseUnaExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2725 return intOp ( tv, e, NULL );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2726 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2727 // primary exp
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2728 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2729 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2730 return parsePrimaryExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2731 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2732
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2733 Expression * parsePrimaryExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2734 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2735 Expression * e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2736 Identifier * ident = NULL;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2737
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2738 switch ( token->value )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2739 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2740 case TOKint32v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2741 case TOKuns32v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2742 case TOKint64v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2743 case TOKuns64v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2744 // semantic here?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2745 // %% for tok64 really should use 64bit type
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2746 e = new IntegerExp ( stmt->loc, token->uns64value, Type::tint32 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2747 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2748 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2749 case TOKfloat32v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2750 case TOKfloat64v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2751 case TOKfloat80v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2752 // %% need different types?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2753 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: 924
diff changeset
2754 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2755 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2756 case TOKidentifier:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2757 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2758 ident = token->ident;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2759 nextToken();
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2760
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2761 if ( ident == Id::__LOCAL_SIZE )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2762 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2763 return new IdentifierExp ( stmt->loc, ident );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2764 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2765 else if ( ident == Id::__dollar )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2766 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2767 do_dollar:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2768 return new IdentifierExp ( stmt->loc, ident );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2769 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2770 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2771 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2772 e = new IdentifierExp ( stmt->loc, ident );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2773 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2774
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2775 // 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: 924
diff changeset
2776 // 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: 924
diff changeset
2777 // simple case is Type.f -> VarDecl(field)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2778 // actually, DMD only supports on level...
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2779 // 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: 924
diff changeset
2780 // %% doesn't handle properties (check%%)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2781 while ( token->value == TOKdot )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2782 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2783 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2784 if ( token->value == TOKidentifier )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2785 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2786 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: 924
diff changeset
2787 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2788 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2789 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2790 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2791 stmt->error ( "expected identifier" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2792 return Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2793 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2794 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2795
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2796 // 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: 924
diff changeset
2797 if ( e->op == TOKidentifier )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2798 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2799 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: 924
diff changeset
2800 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2801 if ( ident == regInfo[i].ident )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2802 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2803 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: 924
diff changeset
2804 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2805 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2806 switch ( token->value )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2807 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2808 case TOKint32v: case TOKuns32v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2809 case TOKint64v: case TOKuns64v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2810 if ( token->uns64value < 8 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2811 e = newRegExp ( ( Reg ) ( Reg_ST + token->uns64value ) );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2812 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2813 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2814 stmt->error ( "invalid floating point register index" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2815 e = Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2816 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2817 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2818 if ( token->value == TOKrparen )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2819 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2820 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2821 stmt->error ( "expected ')'" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2822 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2823 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2824 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2825 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2826 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2827 return Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2828 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2829 else if ( token->value == TOKcolon )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2830 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2831 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2832 if ( operand->segmentPrefix != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2833 stmt->error ( "too many segment prefixes" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2834 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: 924
diff changeset
2835 operand->segmentPrefix = ( Reg ) i;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2836 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2837 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: 924
diff changeset
2838 return parseAsmExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2839 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2840 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2841 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2842 return newRegExp ( ( Reg ) i );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2843 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2844 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2845 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2846 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2847
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2848 if ( opTakesLabel() /*opInfo->takesLabel()*/ && e->op == TOKidentifier )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2849 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2850 // 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: 924
diff changeset
2851 // if IdentifierExp::semantic won't find anything.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2852 Dsymbol *scopesym;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2853
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2854 if ( ! sc->search ( stmt->loc, ident, & scopesym ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2855 return new DsymbolExp ( stmt->loc,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2856 sc->func->searchLabel ( ident ) );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2857 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2858
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2859 e = e->semantic ( sc );
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2860
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2861 // Special case for floating point constant declarations.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2862 if ( e->op == TOKfloat64 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2863 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2864 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: 924
diff changeset
2865 if ( sym )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2866 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2867 VarDeclaration *v = sym->isVarDeclaration();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2868 if ( v )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2869 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2870 Expression *ve = new VarExp ( stmt->loc, v );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2871 ve->type = e->type;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2872 e = ve;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2873 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2874 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2875 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2876 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2877 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2878 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2879 case TOKdollar:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2880 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2881 ident = Id::__dollar;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2882 goto do_dollar;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2883 break;
1084
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
2884 case TOKint16:
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
2885 case TOKint32:
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
2886 //This if for the 'short' in "jle short Label;"
56e56b3b9bb8 Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents: 1057
diff changeset
2887 return Handled;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2888 default:
1092
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
2889 if ( op == Op_FMath0 || op == Op_FdST0ST1 || op == Op_FMath )
e6fadb6e6bdd Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1087
diff changeset
2890 return Handled;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2891 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2892 return Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2893 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2894 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2895 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2896
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2897 void doAlign()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2898 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2899 // .align bits vs. bytes...
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2900 // 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
2901
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2902 // 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: 924
diff changeset
2903 // 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: 924
diff changeset
2904 Expression * e = parseAsmExp()->optimize ( WANTvalue | WANTinterpret );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2905 uinteger_t align = e->toUInteger();
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2906
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2907 if ( ( align & ( align - 1 ) ) == 0 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2908 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2909 //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: 924
diff changeset
2910 // 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: 924
diff changeset
2911 #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
2912 insnTemplate << ".balign\t" << align;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2913 #else
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2914 insnTemplate << ".align\t" << align;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2915 #endif
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2916 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2917 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2918 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2919 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: 924
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: 924
diff changeset
2922 setAsmCode();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2923 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2924
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2925 void doEven()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2926 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2927 // .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: 924
diff changeset
2928 #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
2929 insnTemplate << ".align\t2";
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2930 #else
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2931 insnTemplate << ".align\t2";
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2932 #endif
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2933 setAsmCode();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2934 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2935
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2936 void doNaked()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2937 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2938 // %% can we assume sc->func != 0?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2939 sc->func->naked = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2940 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2941
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2942 void doData()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2943 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2944 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: 924
diff changeset
2945 "", "", ""
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2946 };
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2947 // FIXME
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2948 /*
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2949 machine_mode mode;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2950
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2951 insnTemplate->writestring((char*) directives[op - Op_db]);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2952 insnTemplate->writebyte(' ');
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2953
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2954 do {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2955 // 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: 924
diff changeset
2956 switch (op) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2957 case Op_db:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2958 case Op_ds:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2959 case Op_di:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2960 case Op_dl:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2961 if (token->value == TOKint32v || token->value == TOKuns32v ||
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2962 token->value == TOKint64v || token->value == TOKuns64v) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2963 // 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: 924
diff changeset
2964 if (op != Op_dl)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2965 insnTemplate->printf("%u", (d_uns32) token->uns64value);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2966 else {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2967 // 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: 924
diff changeset
2968 // 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: 924
diff changeset
2969 insnTemplate->printf("%u,%u",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2970 (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: 924
diff changeset
2971 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2972 } else {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2973 stmt->error("expected integer constant");
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2974 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2975 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2976 case Op_df:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2977 mode = SFmode;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2978 goto do_float;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2979 case Op_dd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2980 mode = DFmode;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2981 goto do_float;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2982 case Op_de:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2983 #ifndef TARGET_80387
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2984 #define XFmode TFmode
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2985 #endif
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2986 mode = XFmode; // not TFmode
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2987 // drop through
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2988 do_float:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2989 if (token->value == TOKfloat32v || token->value == TOKfloat64v ||
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2990 token->value == TOKfloat80v) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2991 long words[3];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2992 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: 924
diff changeset
2993 // 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: 924
diff changeset
2994 insnTemplate->printf(".long\t%u", words[0]);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2995 if (mode != SFmode)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2996 insnTemplate->printf(",%u", words[1]);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2997 // 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: 924
diff changeset
2998 if (mode == XFmode)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
2999 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: 924
diff changeset
3000 } else {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3001 stmt->error("expected float constant");
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3002 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3003 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3004 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3005 abort();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3006 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3007
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3008 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3009 if (token->value == TOKcomma) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3010 insnTemplate->writebyte(',');
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3011 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3012 } else if (token->value == TOKeof) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3013 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3014 } else {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3015 stmt->error("expected comma");
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3016 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3017 } while (1);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3018
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3019 setAsmCode();*/
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3020 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3021 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3022
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3023 #if D_GCC_VER < 40
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3024 // 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
3025 // be modified accordingly.
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3026 #undef XEXP
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3027 #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
3028 #endif
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3029
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3030 // FIXME
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3031 #define HOST_WIDE_INT long
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3032 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: 924
diff changeset
3033 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3034 assert ( 0 );
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3035 // FIXME
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3036 // // 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
3037 // // 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
3038 // // 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
3039 // rtx r = DECL_INCOMING_RTL(decl);
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3040 // rtx e1, e2;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3041 //
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3042 // // Local variables don't have DECL_INCOMING_RTL
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3043 // if (r == NULL_RTX)
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3044 // r = DECL_RTL(decl);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3045 //
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3046 // 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: 924
diff changeset
3047 // r = XEXP(r, 0);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3048 // if (GET_CODE(r) == PLUS) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3049 // e1 = XEXP(r, 0);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3050 // e2 = XEXP(r, 1);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3051 // 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: 924
diff changeset
3052 // *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: 924
diff changeset
3053 // return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3054 // } 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: 924
diff changeset
3055 // *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: 924
diff changeset
3056 // return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3057 // }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3058 // } else if (r == virtual_incoming_args_rtx) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3059 // *result = 8;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3060 // return true; // %% same as above
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3061 // }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3062 // // 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
3063 // }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3064 //
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3065 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3066 }
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
3067
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
3068
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3069 struct AsmParser : public AsmParserCommon
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3070 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3071 virtual void run ( Scope* sc, AsmStatement* asmst )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3072 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3073 AsmProcessor ap ( sc, asmst );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3074 ap.run();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3075 }
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
3076
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3077 virtual std::string getRegName ( int i )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3078 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3079 return regInfo[i].gccName;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3080 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 924
diff changeset
3081 };
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
3082
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
3083 }