annotate gen/asm-x86-64.h @ 1351:8d501abecd24

Initial (but disabled) fix for ticket #294 , the actual part that fixes the bug is in a #if 0 block as I'm afraid it will cause regressions. I'm most likely not going to be around tonight, and maybe not tomorrow as well, so I'm pushing it in case someone wants to run some serious testing/investigate the problem noted in llvmhelpers.cpp : realignOffset .
author Tomas Lindquist Olsen <tomas.l.olsen gmail com>
date Thu, 14 May 2009 17:20:17 +0200
parents 5a9dc345c70a
children fdfc4060bcec
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: 935
diff changeset
6 namespace AsmParserx8664
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
7 {
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
8
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
9 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
10 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
11 Reg_Invalid = -1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
12 Reg_EAX = 0,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
13 Reg_EBX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
14 Reg_ECX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
15 Reg_EDX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
16 Reg_ESI,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
17 Reg_EDI,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
18 Reg_EBP,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
19 Reg_ESP,
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
20 Reg_ST,
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
21 Reg_ST1, Reg_ST2, Reg_ST3, Reg_ST4, Reg_ST5, Reg_ST6, Reg_ST7,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
22 Reg_MM0, Reg_MM1, Reg_MM2, Reg_MM3, Reg_MM4, Reg_MM5, Reg_MM6, Reg_MM7,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
23 Reg_XMM0, Reg_XMM1, Reg_XMM2, Reg_XMM3, Reg_XMM4, Reg_XMM5, Reg_XMM6, Reg_XMM7,
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
24
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
25 Reg_RAX, Reg_RBX, Reg_RCX, Reg_RDX, Reg_RSI, Reg_RDI, Reg_RBP, Reg_RSP,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
26 Reg_R8, Reg_R9, Reg_R10, Reg_R11, Reg_R12, Reg_R13, Reg_R14, Reg_R15,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
27 Reg_R8B, Reg_R9B, Reg_R10B, Reg_R11B, Reg_R12B, Reg_R13B, Reg_R14B, Reg_R15B,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
28 Reg_R8W, Reg_R9W, Reg_R10W, Reg_R11W, Reg_R12W, Reg_R13W, Reg_R14W, Reg_R15W,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
29 Reg_R8D, Reg_R9D, Reg_R10D, Reg_R11D, Reg_R12D, Reg_R13D, Reg_R14D, Reg_R15D,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
30 Reg_XMM8, Reg_XMM9, Reg_XMM10, Reg_XMM11, Reg_XMM12, Reg_XMM13, Reg_XMM14, Reg_XMM15,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
31 Reg_RIP,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
32 Reg_SIL, Reg_DIL, Reg_BPL, Reg_SPL,
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
33
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
34 Reg_EFLAGS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
35 Reg_CS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
36 Reg_DS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
37 Reg_SS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
38 Reg_ES,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
39 Reg_FS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
40 Reg_GS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
41 Reg_AX, Reg_BX, Reg_CX, Reg_DX, Reg_SI, Reg_DI, Reg_BP, Reg_SP,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
42 Reg_AL, Reg_AH, Reg_BL, Reg_BH, Reg_CL, Reg_CH, Reg_DL, Reg_DH,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
43 Reg_CR0, Reg_CR2, Reg_CR3, Reg_CR4,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
44 Reg_DR0, Reg_DR1, Reg_DR2, Reg_DR3, Reg_DR6, Reg_DR7,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
45 Reg_TR3, Reg_TR4, Reg_TR5, Reg_TR6, Reg_TR7
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
46 } Reg;
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
47
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
48 static const int N_Regs = /*gp*/ 8 + /*fp*/ 8 + /*mmx*/ 8 + /*sse*/ 8 +
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
49 /*seg*/ 6 + /*16bit*/ 8 + /*8bit*/ 8 + /*sys*/ 4+6+5 + /*flags*/ + 1
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
50 + 8 /*RAX, etc*/
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
51 + 8 /*R8-15*/
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
52 + 4 /*SIL, etc. 8-bit*/
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
53 + 8 /*R8-15B*/
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
54 + 8 /*R8-15W*/
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
55 + 8 /*R8-15D*/
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
56 + 8 /*XMM8-15*/
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
57 + 1 /*RIP*/
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
58
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
59 ;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
60
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
61 #define NULL_TREE ""
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
62
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
63 static struct
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
64 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
65 const char * name;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
66 std::string gccName; // GAS will take upper case, but GCC won't (needed for the clobber list)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
67 Identifier * ident;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
68 char size;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
69 char baseReg; // %% todo: Reg, Reg_XX
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
70 } regInfo[N_Regs] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
71 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
72 { "EAX", NULL_TREE, NULL, 4, Reg_EAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
73 { "EBX", NULL_TREE, NULL, 4, Reg_EBX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
74 { "ECX", NULL_TREE, NULL, 4, Reg_ECX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
75 { "EDX", NULL_TREE, NULL, 4, Reg_EDX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
76 { "ESI", NULL_TREE, NULL, 4, Reg_ESI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
77 { "EDI", NULL_TREE, NULL, 4, Reg_EDI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
78 { "EBP", NULL_TREE, NULL, 4, Reg_EBP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
79 { "ESP", NULL_TREE, NULL, 4, Reg_ESP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
80 { "ST", NULL_TREE, NULL, 10, Reg_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
81 { "ST(1)", NULL_TREE, NULL,10, Reg_ST1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
82 { "ST(2)", NULL_TREE, NULL,10, Reg_ST2 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
83 { "ST(3)", NULL_TREE, NULL,10, Reg_ST3 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
84 { "ST(4)", NULL_TREE, NULL,10, Reg_ST4 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
85 { "ST(5)", NULL_TREE, NULL,10, Reg_ST5 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
86 { "ST(6)", NULL_TREE, NULL,10, Reg_ST6 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
87 { "ST(7)", NULL_TREE, NULL,10, Reg_ST7 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
88 { "MM0", NULL_TREE, NULL, 8, Reg_MM0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
89 { "MM1", NULL_TREE, NULL, 8, Reg_MM1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
90 { "MM2", NULL_TREE, NULL, 8, Reg_MM2 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
91 { "MM3", NULL_TREE, NULL, 8, Reg_MM3 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
92 { "MM4", NULL_TREE, NULL, 8, Reg_MM4 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
93 { "MM5", NULL_TREE, NULL, 8, Reg_MM5 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
94 { "MM6", NULL_TREE, NULL, 8, Reg_MM6 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
95 { "MM7", NULL_TREE, NULL, 8, Reg_MM7 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
96 { "XMM0", NULL_TREE, NULL, 16, Reg_XMM0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
97 { "XMM1", NULL_TREE, NULL, 16, Reg_XMM1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
98 { "XMM2", NULL_TREE, NULL, 16, Reg_XMM2 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
99 { "XMM3", NULL_TREE, NULL, 16, Reg_XMM3 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
100 { "XMM4", NULL_TREE, NULL, 16, Reg_XMM4 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
101 { "XMM5", NULL_TREE, NULL, 16, Reg_XMM5 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
102 { "XMM6", NULL_TREE, NULL, 16, Reg_XMM6 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
103 { "XMM7", NULL_TREE, NULL, 16, Reg_XMM7 },
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
104
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
105 { "RAX", NULL_TREE, NULL, 8, Reg_RAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
106 { "RBX", NULL_TREE, NULL, 8, Reg_RBX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
107 { "RCX", NULL_TREE, NULL, 8, Reg_RCX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
108 { "RDX", NULL_TREE, NULL, 8, Reg_RDX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
109 { "RSI", NULL_TREE, NULL, 8, Reg_RSI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
110 { "RDI", NULL_TREE, NULL, 8, Reg_RDI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
111 { "RBP", NULL_TREE, NULL, 8, Reg_RBP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
112 { "RSP", NULL_TREE, NULL, 8, Reg_RSP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
113 { "R8", NULL_TREE, NULL, 8, Reg_R8 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
114 { "R9", NULL_TREE, NULL, 8, Reg_R9 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
115 { "R10", NULL_TREE, NULL, 8, Reg_R10 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
116 { "R11", NULL_TREE, NULL, 8, Reg_R11 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
117 { "R12", NULL_TREE, NULL, 8, Reg_R12 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
118 { "R13", NULL_TREE, NULL, 8, Reg_R13 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
119 { "R14", NULL_TREE, NULL, 8, Reg_R14 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
120 { "R15", NULL_TREE, NULL, 8, Reg_R15 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
121 { "R8B", NULL_TREE, NULL, 1, Reg_R8 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
122 { "R9B", NULL_TREE, NULL, 1, Reg_R9 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
123 { "R10B", NULL_TREE, NULL, 1, Reg_R10 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
124 { "R11B", NULL_TREE, NULL, 1, Reg_R11 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
125 { "R12B", NULL_TREE, NULL, 1, Reg_R12 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
126 { "R13B", NULL_TREE, NULL, 1, Reg_R13 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
127 { "R14B", NULL_TREE, NULL, 1, Reg_R14 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
128 { "R15B", NULL_TREE, NULL, 1, Reg_R15 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
129 { "R8W", NULL_TREE, NULL, 2, Reg_R8 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
130 { "R9W", NULL_TREE, NULL, 2, Reg_R9 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
131 { "R10W", NULL_TREE, NULL, 2, Reg_R10 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
132 { "R11W", NULL_TREE, NULL, 2, Reg_R11 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
133 { "R12W", NULL_TREE, NULL, 2, Reg_R12 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
134 { "R13W", NULL_TREE, NULL, 2, Reg_R13 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
135 { "R14W", NULL_TREE, NULL, 2, Reg_R14 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
136 { "R15W", NULL_TREE, NULL, 2, Reg_R15 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
137 { "R8D", NULL_TREE, NULL, 4, Reg_R8 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
138 { "R9D", NULL_TREE, NULL, 4, Reg_R9 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
139 { "R10D", NULL_TREE, NULL, 4, Reg_R10 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
140 { "R11D", NULL_TREE, NULL, 4, Reg_R11 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
141 { "R12D", NULL_TREE, NULL, 4, Reg_R12 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
142 { "R13D", NULL_TREE, NULL, 4, Reg_R13 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
143 { "R14D", NULL_TREE, NULL, 4, Reg_R14 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
144 { "R15D", NULL_TREE, NULL, 4, Reg_R15 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
145 { "XMM8", NULL_TREE, NULL, 16, Reg_XMM8 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
146 { "XMM9", NULL_TREE, NULL, 16, Reg_XMM9 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
147 { "XMM10", NULL_TREE, NULL, 16, Reg_XMM10 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
148 { "XMM11", NULL_TREE, NULL, 16, Reg_XMM11 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
149 { "XMM12", NULL_TREE, NULL, 16, Reg_XMM12 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
150 { "XMM13", NULL_TREE, NULL, 16, Reg_XMM13 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
151 { "XMM14", NULL_TREE, NULL, 16, Reg_XMM14 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
152 { "XMM15", NULL_TREE, NULL, 16, Reg_XMM15 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
153 { "RIP", NULL_TREE, NULL, 8, Reg_RIP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
154 { "SIL", NULL_TREE, NULL, 1, Reg_SIL },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
155 { "DIL", NULL_TREE, NULL, 1, Reg_DIL },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
156 { "BPL", NULL_TREE, NULL, 1, Reg_BPL },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
157 { "SPL", NULL_TREE, NULL, 1, Reg_SPL },
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
158
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
159 { "FLAGS", NULL_TREE, NULL, 0, Reg_EFLAGS }, // the gcc name is "flags"; not used in assembler input
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
160 { "CS", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
161 { "DS", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
162 { "SS", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
163 { "ES", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
164 { "FS", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
165 { "GS", NULL_TREE, NULL, 2, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
166 { "AX", NULL_TREE, NULL, 2, Reg_EAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
167 { "BX", NULL_TREE, NULL, 2, Reg_EBX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
168 { "CX", NULL_TREE, NULL, 2, Reg_ECX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
169 { "DX", NULL_TREE, NULL, 2, Reg_EDX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
170 { "SI", NULL_TREE, NULL, 2, Reg_ESI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
171 { "DI", NULL_TREE, NULL, 2, Reg_EDI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
172 { "BP", NULL_TREE, NULL, 2, Reg_EBP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
173 { "SP", NULL_TREE, NULL, 2, Reg_ESP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
174 { "AL", NULL_TREE, NULL, 1, Reg_EAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
175 { "AH", NULL_TREE, NULL, 1, Reg_EAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
176 { "BL", NULL_TREE, NULL, 1, Reg_EBX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
177 { "BH", NULL_TREE, NULL, 1, Reg_EBX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
178 { "CL", NULL_TREE, NULL, 1, Reg_ECX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
179 { "CH", NULL_TREE, NULL, 1, Reg_ECX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
180 { "DL", NULL_TREE, NULL, 1, Reg_EDX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
181 { "DH", NULL_TREE, NULL, 1, Reg_EDX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
182 { "CR0", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
183 { "CR2", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
184 { "CR3", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
185 { "CR4", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
186 { "DR0", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
187 { "DR1", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
188 { "DR2", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
189 { "DR3", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
190 { "DR6", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
191 { "DR7", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
192 { "TR3", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
193 { "TR4", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
194 { "TR5", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
195 { "TR6", NULL_TREE, NULL, 0, -1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
196 { "TR7", NULL_TREE, NULL, 0, -1 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
197 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
198
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
199 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
200 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
201 No_Type_Needed,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
202 Int_Types,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
203 Word_Types, // same as Int_Types, but byte is not allowed
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
204 FP_Types,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
205 FPInt_Types,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
206 Byte_NoType, // byte only, but no type suffix
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
207 } TypeNeeded;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
208
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
209 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
210 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
211 No_Link,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
212 Out_Mnemonic,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
213 Next_Form
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
214 } OpLink;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
215
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
216 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
217 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
218 Clb_SizeAX = 0x01,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
219 Clb_SizeDXAX = 0x02,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
220 Clb_EAX = 0x03,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
221 Clb_DXAX_Mask = 0x03,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
222
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
223 Clb_Flags = 0x04,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
224 Clb_DI = 0x08,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
225 Clb_SI = 0x10,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
226 Clb_CX = 0x20,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
227 Clb_ST = 0x40,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
228 Clb_SP = 0x80 // Doesn't actually let GCC know the frame pointer is modified
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
229 } ImplicitClober;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
230
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
231 // "^ +/..\([A-Za-z_0-9]+\).*" -> " \1,"
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
232 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
233 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
234 Op_Invalid,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
235 Op_Adjust,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
236 Op_Dst,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
237 Op_Upd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
238 Op_DstW,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
239 Op_DstF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
240 Op_UpdF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
241 Op_DstSrc,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
242 Op_DstSrcF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
243 Op_UpdSrcF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
244 Op_DstSrcFW,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
245 Op_UpdSrcFW,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
246 Op_DstSrcSSE,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
247 Op_DstSrcMMX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
248 Op_DstSrcImmS,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
249 Op_DstSrcImmM,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
250 Op_UpdSrcShft,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
251 Op_DstSrcNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
252 Op_UpdSrcNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
253 Op_DstMemNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
254 Op_DstRMBNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
255 Op_DstRMWNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
256 Op_UpdUpd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
257 Op_UpdUpdF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
258 Op_Src,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
259 Op_SrcRMWNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
260 Op_SrcW,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
261 Op_SrcImm,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
262 Op_Src_DXAXF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
263 Op_SrcMemNT,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
264 Op_SrcMemNTF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
265 Op_SrcSrc,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
266 Op_SrcSrcF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
267 Op_SrcSrcFW,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
268 Op_SrcSrcSSEF,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
269 Op_SrcSrcMMX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
270 Op_Shift,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
271 Op_Branch,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
272 Op_CBranch,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
273 Op_0,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
274 Op_0_AX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
275 Op_0_DXAX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
276 Op_Loop,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
277 Op_Flags,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
278 Op_F0_ST,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
279 Op_F0_P,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
280 Op_Fs_P,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
281 Op_Fis,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
282 Op_Fis_ST,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
283 Op_Fis_P,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
284 Op_Fid,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
285 Op_Fid_P,
1083
c1e9f612e2e2 Fix for dual operand form of fistp, also make reg ST(0) explicit and fix lindquists
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1078
diff changeset
286 Op_FidR_P,
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
287 Op_Ffd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
288 Op_FfdR,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
289 Op_Ffd_P,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
290 Op_FfdR_P,
1058
8bc277ef23a5 Applied rev two operand form fstp fix to x86-64 asm
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1053
diff changeset
291 Op_FfdRR_P,
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
292 Op_Fd_P,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
293 Op_FdST,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
294 Op_FMath,
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
295 Op_FMath0,
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
296 Op_FMath2,
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
297 Op_FdSTiSTi,
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
298 Op_FdST0ST1,
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
299 Op_FPMath,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
300 Op_FCmp,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
301 Op_FCmp1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
302 Op_FCmpP,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
303 Op_FCmpP1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
304 Op_FCmpFlg,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
305 Op_FCmpFlgP,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
306 Op_fld,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
307 Op_fldR,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
308 Op_fxch,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
309 Op_fxch1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
310 Op_fxch0,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
311 Op_SizedStack,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
312 Op_bound,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
313 Op_bswap,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
314 Op_cmps,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
315 Op_cmpsd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
316 Op_cmpsX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
317 Op_cmpxchg8b,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
318 Op_cmpxchg,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
319 Op_cpuid,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
320 Op_enter,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
321 Op_fdisi,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
322 Op_feni,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
323 Op_fsetpm,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
324 Op_fXstsw,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
325 Op_imul,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
326 Op_imul2,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
327 Op_imul1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
328 Op_in,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
329 Op_ins,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
330 Op_insX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
331 Op_iret,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
332 Op_iretd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
333 Op_lods,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
334 Op_lodsX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
335 Op_movs,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
336 Op_movsd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
337 Op_movsX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
338 Op_movsx,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
339 Op_movzx,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
340 Op_mul,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
341 Op_out,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
342 Op_outs,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
343 Op_outsX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
344 Op_push,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
345 Op_ret,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
346 Op_retf,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
347 Op_scas,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
348 Op_scasX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
349 Op_stos,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
350 Op_stosX,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
351 Op_xlat,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
352 N_AsmOpInfo,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
353 Op_Align,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
354 Op_Even,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
355 Op_Naked,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
356 Op_db,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
357 Op_ds,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
358 Op_di,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
359 Op_dl,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
360 Op_df,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
361 Op_dd,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
362 Op_de
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
363 } AsmOp;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
364
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
365 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
366 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
367 Opr_None = 0,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
368 OprC_MRI = 1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
369 OprC_MR = 2,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
370 OprC_Mem = 3,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
371 OprC_Reg = 4,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
372 OprC_Imm = 5,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
373 OprC_SSE = 6,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
374 OprC_SSE_Mem = 7,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
375 OprC_R32 = 8,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
376 OprC_RWord = 9,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
377 OprC_RFP = 10,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
378 OprC_AbsRel = 11,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
379 OprC_Relative = 12,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
380 OprC_Port = 13, // DX or imm
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
381 OprC_AX = 14, // AL,AX,EAX
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
382 OprC_DX = 15, // only DX
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
383 OprC_MMX = 16,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
384 OprC_MMX_Mem = 17,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
385 OprC_Shift = 18, // imm or CL
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
386
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
387 Opr_ClassMask = 0x1f,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
388
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
389 Opr_Dest = 0x20,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
390 Opr_Update = 0x60,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
391
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
392 Opr_NoType = 0x80,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
393 } OprVals;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
394
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
395
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
396 typedef struct
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
397 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
398 } AsmOprInfo;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
399
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
400 typedef unsigned char Opr;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
401
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
402 typedef struct
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
403 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
404 Opr operands[3];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
405 unsigned char
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
406 needsType : 3,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
407 implicitClobbers : 8,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
408 linkType : 2;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
409 unsigned link;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
410
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
411 /*
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
412 bool takesLabel() {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
413 return operands[0] & Opr_Label;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
414 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
415 */
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
416
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
417 unsigned nOperands()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
418 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
419 if ( !operands[0] )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
420 return 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
421 else if ( !operands[1] )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
422 return 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
423 else if ( !operands[2] )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
424 return 2;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
425 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
426 return 3;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
427 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
428 } AsmOpInfo;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
429
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
430 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
431 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
432 Mn_fdisi,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
433 Mn_feni,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
434 Mn_fsetpm,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
435 Mn_iretw,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
436 Mn_iret,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
437 Mn_lret,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
438 Mn_cmpxchg8b,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
439 N_AltMn
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
440 } Alternate_Mnemonics;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
441
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
442 static const char * alternateMnemonics[N_AltMn] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
443 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
444 ".byte 0xdb, 0xe1",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
445 ".byte 0xdb, 0xe0",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
446 ".byte 0xdb, 0xe4",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
447 "iretw",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
448 "iret",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
449 "lret",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
450 "cmpxchg8b"
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
451 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
452
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
453 #define mri OprC_MRI
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
454 #define mr OprC_MR
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
455 #define mem OprC_Mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
456 // for now mfp=mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
457 #define mfp OprC_Mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
458 #define reg OprC_Reg
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
459 #define imm OprC_Imm
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
460 #define sse OprC_SSE
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
461 #define ssem OprC_SSE_Mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
462 #define mmx OprC_MMX
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
463 #define mmxm OprC_MMX_Mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
464 #define r32 OprC_R32
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
465 #define rw OprC_RWord
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
466 #define rfp OprC_RFP
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
467 #define port OprC_Port
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
468 #define ax OprC_AX
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
469 #define dx OprC_DX
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
470 #define shft OprC_Shift
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
471 #define D Opr_Dest
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
472 #define U Opr_Update
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
473 #define N Opr_NoType
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
474 //#define L Opr_Label
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
475
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
476 // D=dest, N=notype
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
477 static AsmOpInfo asmOpInfo[N_AsmOpInfo] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
478 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
479 /* Op_Invalid */ {},
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
480 /* Op_Adjust */ { 0,0,0, 0, Clb_EAX /*just AX*/ },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
481 /* Op_Dst */ { D|mr, 0, 0, 1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
482 /* Op_Upd */ { U|mr, 0, 0, 1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
483 /* Op_DstW */ { D|mr, 0, 0, Word_Types },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
484 /* Op_DstF */ { D|mr, 0, 0, 1, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
485 /* Op_UpdF */ { U|mr, 0, 0, 1, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
486 /* Op_DstSrc */ { D|mr, mri, 0,/**/1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
487 /* Op_DstSrcF */ { D|mr, mri, 0,/**/1, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
488 /* Op_UpdSrcF */ { U|mr, mri, 0,/**/1, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
489 /* Op_DstSrcFW */ { D|mr, mri, 0,/**/Word_Types, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
490 /* Op_UpdSrcFW */ { U|mr, mri, 0,/**/Word_Types, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
491 /* Op_DstSrcSSE */ { U|sse, ssem, 0 }, // some may not be update %%
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
492 /* Op_DstSrcMMX */ { U|mmx, mmxm, 0 }, // some may not be update %%
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
493 /* Op_DstSrcImmS*/ { U|sse, ssem, N|imm }, // some may not be update %%
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
494 /* Op_DstSrcImmM*/ { U|mmx, mmxm, N|imm }, // some may not be update %%
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
495 /* Op_UpdSrcShft*/ { U|mr, reg, N|shft, 1, Clb_Flags }, // 16/32 only
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
496 /* Op_DstSrcNT */ { D|mr, mr, 0, 0 }, // used for movd .. operands can be rm32,sse,mmx
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
497 /* Op_UpdSrcNT */ { U|mr, mr, 0, 0 }, // used for movd .. operands can be rm32,sse,mmx
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
498 /* Op_DstMemNT */ { D|mem, 0, 0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
499 /* Op_DstRMBNT */ { D|mr, 0, 0, Byte_NoType },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
500 /* Op_DstRMWNT */ { D|mr, 0, 0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
501 /* Op_UpdUpd */ { U|mr,U|mr, 0,/**/1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
502 /* Op_UpdUpdF */ { U|mr,U|mr, 0,/**/1, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
503 /* Op_Src */ { mri, 0, 0, 1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
504 /* Op_SrcRMWNT */ { mr, 0, 0, 0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
505 /* Op_SrcW */ { mri, 0, 0, Word_Types },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
506 /* Op_SrcImm */ { imm },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
507 /* Op_Src_DXAXF */ { mr, 0, 0, 1, Clb_SizeDXAX|Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
508 /* Op_SrcMemNT */ { mem, 0, 0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
509 /* Op_SrcMemNTF */ { mem, 0, 0, 0, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
510 /* Op_SrcSrc */ { mr, mri, 0, 1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
511 /* Op_SrcSrcF */ { mr, mri, 0, 1, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
512 /* Op_SrcSrcFW */ { mr, mri, 0, Word_Types, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
513 /* Op_SrcSrcSSEF*/ { sse, ssem, 0, 0, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
514 /* Op_SrcSrcMMX */ { mmx, mmx, 0, },
961
f33413a955fa Fix shl/r bad operand size error
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 944
diff changeset
515 /* Op_Shift */ { D|mr,N|shft, 0,/**/0, Clb_Flags },
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
516 /* Op_Branch */ { mri },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
517 /* Op_CBranch */ { imm },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
518 /* Op_0 */ { 0,0,0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
519 /* Op_0_AX */ { 0,0,0, 0, Clb_SizeAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
520 /* Op_0_DXAX */ { 0,0,0, 0, Clb_SizeDXAX }, // but for cwd/cdq -- how do know the size..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
521 /* Op_Loop */ { imm, 0, 0, 0, Clb_CX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
522 /* Op_Flags */ { 0,0,0, 0, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
523 /* Op_F0_ST */ { 0,0,0, 0, Clb_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
524 /* Op_F0_P */ { 0,0,0, 0, Clb_ST }, // push, pops, etc. not sure how to inform gcc..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
525 /* Op_Fs_P */ { mem, 0, 0, 0, Clb_ST }, // "
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
526 /* Op_Fis */ { mem, 0, 0, FPInt_Types }, // only 16bit and 32bit, DMD defaults to 16bit
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
527 /* Op_Fis_ST */ { mem, 0, 0, FPInt_Types, Clb_ST }, // "
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
528 /* Op_Fis_P */ { mem, 0, 0, FPInt_Types, Clb_ST }, // push and pop, fild so also 64 bit
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
529 /* Op_Fid */ { D|mem, 0, 0, FPInt_Types }, // only 16bit and 32bit, DMD defaults to 16bit
1085
8cb5b746500c Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1083
diff changeset
530 /* Op_Fid_P */ { D|mem, 0, 0, FPInt_Types, Clb_ST, Next_Form, Op_FidR_P }, // push and pop, fild so also 64 bit
1100
b3a0cf072ed0 Fix an error in the ASM tables introduced by the recent fistp fixes.
Frits van Bommel <fvbommel wxs.nl>
parents: 1098
diff changeset
531 /* Op_FidR_P */ { D|mem,rfp, 0, FPInt_Types, Clb_ST }, // push and pop, fild so also 64 bit
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
532 /* Op_Ffd */ { D|mfp, 0, 0, FP_Types, 0, Next_Form, Op_FfdR }, // only 16bit and 32bit, DMD defaults to 16bit, reg form doesn't need type
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
533 /* Op_FfdR */ { D|rfp, 0, 0 },
1058
8bc277ef23a5 Applied rev two operand form fstp fix to x86-64 asm
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1053
diff changeset
534 /* Op_Ffd_P */ { D|mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_FfdR_P }, // pop, fld so also 80 bit, "
8bc277ef23a5 Applied rev two operand form fstp fix to x86-64 asm
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1053
diff changeset
535 /* Op_FfdR_P */ { D|rfp, 0, 0, 0, Clb_ST, Next_Form, Op_FfdRR_P },
1108
d03814546977 Apply r1106 to x86-64 asm too
Frits van Bommel <fvbommel wxs.nl>
parents: 1102
diff changeset
536 /* Op_FfdRR_P */ { D|rfp,rfp, 0, 0, Clb_ST },
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
537 /* Op_Fd_P */ { D|mem, 0, 0, 0, Clb_ST }, // "
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
538 /* Op_FdST */ { D|rfp, 0, 0 },
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
539 /* Op_FMath */ { mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_FMath0 }, // and only single or double prec
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
540 /* Op_FMath0 */ { 0, 0, 0, 0, Clb_ST, Next_Form, Op_FMath2 }, // pops
1101
8bf8b058944a Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents: 1100
diff changeset
541 /* Op_FMath2 */ { D|rfp, rfp, 0, 0, Clb_ST, Next_Form, Op_FdST0ST1 }, // and only single or double prec
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
542 /* Op_FdSTiSTi */ { D|rfp, rfp, 0, },
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
543 /* Op_FdST0ST1 */ { 0, 0, 0, },
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
544 /* Op_FPMath */ { D|rfp, rfp, 0, 0, Clb_ST, Next_Form, Op_F0_P }, // pops
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
545 /* Op_FCmp */ { mfp, 0, 0, FP_Types, 0, Next_Form, Op_FCmp1 }, // DMD defaults to float ptr
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
546 /* Op_FCmp1 */ { rfp, 0, 0, 0, 0, Next_Form, Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
547 /* Op_FCmpP */ { mfp, 0, 0, FP_Types, 0, Next_Form, Op_FCmpP1 }, // pops
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
548 /* Op_FCmpP1 */ { rfp, 0, 0, 0, 0, Next_Form, Op_F0_P }, // pops
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
549 /* Op_FCmpFlg */ { rfp, rfp, 0, 0, Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
550 /* Op_FCmpFlgP */ { rfp, rfp, 0, 0, Clb_Flags }, // pops
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
551 /* Op_fld */ { mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_fldR },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
552 /* Op_fldR */ { rfp, 0, 0, 0, Clb_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
553 /* Op_fxch */ { D|rfp,D|rfp, 0, 0, Clb_ST, Next_Form, Op_fxch1 }, // not in intel manual?, but DMD allows it (gas won't), second arg must be ST
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
554 /* Op_fxch1 */ { D|rfp, 0, 0, 0, Clb_ST, Next_Form, Op_fxch0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
555 /* Op_fxch0 */ { 0, 0, 0, 0, Clb_ST }, // Also clobbers ST(1)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
556 /* Op_SizedStack*/ { 0, 0, 0, 0, Clb_SP }, // type suffix special case
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
557 /* Op_bound */ { mr, mri, 0, Word_Types }, // operands *not* reversed for gas
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
558 /* Op_bswap */ { D|r32 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
559 /* Op_cmps */ { mem, mem, 0, 1, Clb_DI|Clb_SI|Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
560 /* Op_cmpsd */ { 0, 0, 0, 0, Clb_DI|Clb_SI|Clb_Flags, Next_Form, Op_DstSrcImmS },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
561 /* Op_cmpsX */ { 0, 0, 0, 0, Clb_DI|Clb_SI|Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
562 /* Op_cmpxchg8b */ { D|mem/*64*/,0,0, 0, Clb_SizeDXAX/*32*/|Clb_Flags, Out_Mnemonic, Mn_cmpxchg8b },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
563 /* Op_cmpxchg */ { D|mr, reg, 0, 1, Clb_SizeAX|Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
564 /* Op_cpuid */ { 0,0,0 }, // Clobbers eax, ebx, ecx, and edx. Handled specially below.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
565 /* Op_enter */ { imm, imm }, // operands *not* reversed for gas, %% inform gcc of EBP clobber?,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
566 /* Op_fdisi */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_fdisi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
567 /* Op_feni */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_feni },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
568 /* Op_fsetpm */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_fsetpm },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
569 /* Op_fXstsw */ { D|mr, 0, 0, }, // ax is the only allowed register
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
570 /* Op_imul */ { D|reg, mr, imm, 1, Clb_Flags, Next_Form, Op_imul2 }, // 16/32 only
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
571 /* Op_imul2 */ { D|reg, mri, 0, 1, Clb_Flags, Next_Form, Op_imul1 }, // 16/32 only
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
572 /* Op_imul1 */ { mr, 0, 0, 1, Clb_Flags|Clb_SizeDXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
573 /* Op_in */ { D|ax,N|port,0, 1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
574 /* Op_ins */ { mem,N|dx, 0, 1, Clb_DI }, // can't override ES segment for this one
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
575 /* Op_insX */ { 0, 0, 0, 0, Clb_DI }, // output segment overrides %% needs work
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
576 /* Op_iret */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_iretw },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
577 /* Op_iretd */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_iret },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
578 /* Op_lods */ { mem, 0, 0, 1, Clb_SI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
579 /* Op_lodsX */ { 0, 0, 0, 0, Clb_SI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
580 /* Op_movs */ { mem, mem, 0, 1, Clb_DI|Clb_SI }, // only src/DS can be overridden
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
581 /* Op_movsd */ { 0, 0, 0, 0, Clb_DI|Clb_SI, Next_Form, Op_DstSrcSSE }, // %% gas doesn't accept movsd .. has to movsl
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
582 /* Op_movsX */ { 0, 0, 0, 0, Clb_DI|Clb_SI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
583 /* Op_movsx */ { D|reg, mr, 0, 1 }, // type suffix is special case
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
584 /* Op_movzx */ { D|reg, mr, 0, 1 }, // type suffix is special case
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
585 /* Op_mul */ { U|ax, mr, 0, 1, Clb_SizeDXAX|Clb_Flags, Next_Form, Op_Src_DXAXF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
586 /* Op_out */ { N|port,ax, 0, 1 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
587 /* Op_outs */ { N|dx, mem, 0, 1, Clb_SI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
588 /* Op_outsX */ { 0, 0, 0, 0, Clb_SI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
589 /* Op_push */ { mri, 0, 0, 0, Clb_SP }, // would be Op_SrcW, but DMD defaults to 32-bit for immediate form
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
590 /* Op_ret */ { imm, 0, 0, 0, 0, Next_Form, Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
591 /* Op_retf */ { 0, 0, 0, 0, 0, Out_Mnemonic, Mn_lret },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
592 /* Op_scas */ { mem, 0, 0, 1, Clb_DI|Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
593 /* Op_scasX */ { 0, 0, 0, 0, Clb_DI|Clb_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
594 /* Op_stos */ { mem, 0, 0, 1, Clb_DI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
595 /* Op_stosX */ { 0, 0, 0, 0, Clb_DI },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
596 /* Op_xlat */ { mem, 0, 0, 0, Clb_SizeAX }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
597
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
598 /// * Op_arpl */ { D|mr, reg }, // 16 only -> DstSrc
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
599 /// * Op_bsX */ { rw, mrw, 0, 1, Clb_Flags },//->srcsrcf
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
600 /// * Op_bt */ { mrw, riw, 0, 1, Clb_Flags },//->srcsrcf
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
601 /// * Op_btX */ { D|mrw, riw, 0, 1, Clb_Flags },//->dstsrcf .. immediate does not contribute to size
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
602 /// * Op_cmovCC */ { D|rw, mrw, 0, 1 } // ->dstsrc
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
603 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
604
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
605 #undef mri
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
606 #undef mr
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
607 #undef mem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
608 #undef mfp
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
609 #undef reg
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
610 #undef imm
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
611 #undef sse
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
612 #undef ssem
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
613 #undef mmx
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
614 #undef mmxm
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
615 #undef r32
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
616 #undef rw
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
617 #undef rfp
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
618 #undef port
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
619 #undef ax
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
620 #undef dx
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
621 #undef shft
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
622 #undef D
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
623 #undef U
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
624 #undef N
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
625 //#undef L
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
626
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
627 typedef struct
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
628 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
629 const char * inMnemonic;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
630 AsmOp asmOp;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
631 } AsmOpEnt;
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
632
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
633 /* Some opcodes which have data size restrictions, but we don't check
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
634
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
635 cmov, l<segreg> ?, lea, lsl, shld
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
636
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
637 todo: push <immediate> is always the 32-bit form, even tho push <mem> is 16-bit
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
638 */
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
639
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
640 static AsmOpEnt opData[] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
641 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
642 { "adc", Op_UpdSrcF },
979
523bf4f166bc Fix some assembler issues:
Frits van Bommel <fvbommel wxs.nl>
parents: 970
diff changeset
643 { "add", Op_UpdSrcF },
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
644 { "addpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
645 { "addps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
646 { "addq", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
647 { "addsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
648 { "addss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
649 { "addsubpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
650 { "addsubps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
651 { "and", Op_UpdSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
652 { "andnpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
653 { "andnps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
654 { "andpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
655 { "andps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
656 { "bsf", Op_SrcSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
657 { "bsr", Op_SrcSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
658 { "bswap", Op_bswap },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
659 { "bt", Op_SrcSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
660 { "btc", Op_UpdSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
661 { "btr", Op_UpdSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
662 { "bts", Op_UpdSrcFW },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
663 { "call", Op_Branch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
664 { "callf", Op_Branch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
665 { "cbw", Op_0_AX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
666 { "cdqe", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
667 { "clc", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
668 { "cld", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
669 { "clflush",Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
670 { "cli", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
671 { "clts", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
672 { "cmc", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
673 { "cmova", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
674 { "cmovae", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
675 { "cmovb", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
676 { "cmovbe", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
677 { "cmovc", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
678 { "cmove", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
679 { "cmovg", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
680 { "cmovge", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
681 { "cmovl", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
682 { "cmovle", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
683 { "cmovna", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
684 { "cmovnae",Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
685 { "cmovnb", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
686 { "cmovnbe",Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
687 { "cmovnc", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
688 { "cmovne", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
689 { "cmovng", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
690 { "cmovnge",Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
691 { "cmovnl", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
692 { "cmovnle",Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
693 { "cmovno", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
694 { "cmovnp", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
695 { "cmovns", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
696 { "cmovnz", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
697 { "cmovo", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
698 { "cmovp", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
699 { "cmovpe", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
700 { "cmovpo", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
701 { "cmovs", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
702 { "cmovz", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
703 { "cmp", Op_SrcSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
704 { "cmppd", Op_DstSrcImmS },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
705 { "cmpps", Op_DstSrcImmS },
1016
16e2c750c857 Just forgot an opcode for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 979
diff changeset
706 { "cmpq", Op_DstSrcNT },
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
707 { "cmps", Op_cmps },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
708 { "cmpsb", Op_cmpsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
709 { "cmpsd", Op_cmpsd }, // string cmp, and SSE cmp
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
710 { "cmpss", Op_DstSrcImmS },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
711 { "cmpsw", Op_cmpsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
712 { "cmpsq", Op_cmpsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
713 /*
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
714 { "cdqe", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
715 { "cmpsq", Op_cmpsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
716 { "cmpxch16b", Op_cmpxchg16b },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
717 { "cqo", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
718 { "lodsq", Op_lodsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
719 { "movsq", Op_movsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
720 { "popfq", Op_SizedStack },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
721 { "pushfq", Op_SizedStack },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
722 { "scasq", Op_scasX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
723 { "stosq", Op_stosX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
724 { "iretq", Op_iretd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
725 { "swapgs", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
726 { "extrq", Op_Extrq },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
727 { "movsxq", Op_movsxq },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
728
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
729 { "clgi", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
730 { "invlpga", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
731 { "rdtscp", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
732 { "stgi", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
733 { "sysret", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
734 */
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
735
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
736 { "cmpxch16b", Op_cmpxchg8b },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
737 { "cmpxch8b", Op_cmpxchg8b }, // %% DMD opcode typo?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
738 { "cmpxchg", Op_cmpxchg },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
739 { "comisd", Op_SrcSrcSSEF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
740 { "comiss", Op_SrcSrcSSEF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
741 { "cpuid", Op_cpuid },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
742 { "cvtdq2pd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
743 { "cvtdq2ps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
744 { "cvtpd2dq", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
745 { "cvtpd2pi", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
746 { "cvtpd2ps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
747 { "cvtpi2pd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
748 { "cvtpi2ps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
749 { "cvtps2dq", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
750 { "cvtps2pd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
751 { "cvtps2pi", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
752 { "cvtsd2si", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
753 { "cvtsd2ss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
754 { "cvtsi2sd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
755 { "cvtsi2ss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
756 { "cvtss2sd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
757 { "cvtss2si", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
758 { "cvttpd2dq", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
759 { "cvttpd2pi", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
760 { "cvttps2dq", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
761 { "cvttps2pi", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
762 { "cvttsd2si", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
763 { "cvttss2si", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
764 { "cwd", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
765 { "cwde", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
766 //{ "da", Op_ },// dunno what this is -- takes labels?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
767 { "db", Op_db },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
768 { "dd", Op_dd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
769 { "de", Op_de },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
770 { "dec", Op_UpdF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
771 { "df", Op_df },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
772 { "di", Op_di },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
773 { "div", Op_Src_DXAXF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
774 { "divpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
775 { "divps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
776 { "divsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
777 { "divss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
778 { "dl", Op_dl },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
779 { "dq", Op_dl },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
780 { "ds", Op_ds },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
781 { "dt", Op_de },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
782 { "dw", Op_ds },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
783 { "emms", Op_0 }, // clobber all mmx/fp?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
784 { "enter", Op_enter },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
785 { "f2xm1", Op_F0_ST }, // %% most of these are update...
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
786 { "fabs", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
787 { "fadd", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
788 { "faddp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
789 { "fbld", Op_Fs_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
790 { "fbstp", Op_Fd_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
791 { "fchs", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
792 { "fclex", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
793 { "fcmovb", Op_FdSTiSTi }, // but only ST(0) can be the destination -- should be FdST0STi
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
794 { "fcmovbe", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
795 { "fcmove", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
796 { "fcmovnb", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
797 { "fcmovnbe", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
798 { "fcmovne", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
799 { "fcmovnu", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
800 { "fcmovu", Op_FdSTiSTi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
801 { "fcom", Op_FCmp },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
802 { "fcomi", Op_FCmpFlg },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
803 { "fcomip", Op_FCmpFlgP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
804 { "fcomp", Op_FCmpP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
805 { "fcompp", Op_F0_P }, // pops twice
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
806 { "fcos", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
807 { "fdecstp",Op_F0_P }, // changes stack
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
808 { "fdisi", Op_fdisi },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
809 { "fdiv", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
810 { "fdivp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
811 { "fdivr", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
812 { "fdivrp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
813 { "feni", Op_feni },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
814 { "ffree", Op_FdST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
815 { "fiadd", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
816 { "ficom", Op_Fis },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
817 { "ficomp", Op_Fis_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
818 { "fidiv", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
819 { "fidivr", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
820 { "fild", Op_Fis_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
821 { "fimul", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
822 { "fincstp",Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
823 { "finit", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
824 { "fist", Op_Fid }, // only 16,32bit
1085
8cb5b746500c Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1083
diff changeset
825 { "fistp", Op_Fid_P },
8cb5b746500c Properly fix fistp for x64
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1083
diff changeset
826 { "fisttp", Op_Fid_P },
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
827 { "fisub", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
828 { "fisubr", Op_Fis_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
829 { "fld", Op_fld },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
830 { "fld1", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
831 { "fldcw", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
832 { "fldenv", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
833 { "fldl2e", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
834 { "fldl2t", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
835 { "fldlg2", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
836 { "fldln2", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
837 { "fldpi", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
838 { "fldz", Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
839 { "fmul", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
840 { "fmulp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
841 { "fnclex", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
842 { "fndisi", Op_fdisi }, // ??
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
843 { "fneni", Op_feni }, // ??
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
844 { "fninit", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
845 { "fnop", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
846 { "fnsave", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
847 { "fnstcw", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
848 { "fnstenv",Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
849 { "fnstsw", Op_fXstsw },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
850 { "fpatan", Op_F0_P }, // pop and modify new ST
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
851 { "fprem", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
852 { "fprem1", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
853 { "fptan", Op_F0_P }, // modify ST and push 1.0
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
854 { "frndint",Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
855 { "frstor", Op_SrcMemNT }, // but clobbers everything
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
856 { "fsave", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
857 { "fscale", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
858 { "fsetpm", Op_fsetpm },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
859 { "fsin", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
860 { "fsincos",Op_F0_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
861 { "fsqrt", Op_F0_ST },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
862 { "fst", Op_Ffd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
863 { "fstcw", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
864 { "fstenv", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
865 { "fstp", Op_Ffd_P },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
866 { "fstsw", Op_fXstsw },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
867 { "fsub", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
868 { "fsubp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
869 { "fsubr", Op_FMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
870 { "fsubrp", Op_FPMath },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
871 { "ftst", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
872 { "fucom", Op_FCmp },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
873 { "fucomi", Op_FCmpFlg },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
874 { "fucomip",Op_FCmpFlgP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
875 { "fucomp", Op_FCmpP },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
876 { "fucompp",Op_F0_P }, // pops twice
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
877 { "fwait", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
878 { "fxam", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
879 { "fxch", Op_fxch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
880 { "fxrstor",Op_SrcMemNT }, // clobbers FP,MMX,SSE
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
881 { "fxsave", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
882 { "fxtract",Op_F0_P }, // pushes
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
883 { "fyl2x", Op_F0_P }, // pops
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
884 { "fyl2xp1",Op_F0_P }, // pops
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
885 { "haddpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
886 { "haddps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
887 { "hlt", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
888 { "hsubpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
889 { "hsubps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
890 { "idiv", Op_Src_DXAXF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
891 { "imul", Op_DstSrcNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
892 { "in", Op_in },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
893 { "inc", Op_UpdF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
894 { "ins", Op_ins },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
895 { "insb", Op_insX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
896 { "insd", Op_insX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
897 { "insw", Op_insX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
898 { "int", Op_SrcImm },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
899 { "into", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
900 { "invd", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
901 { "invlpg", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
902 { "iret", Op_iret },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
903 { "iretd", Op_iretd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
904 { "iretq", Op_iretd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
905 { "ja", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
906 { "jae", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
907 { "jb", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
908 { "jbe", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
909 { "jc", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
910 { "jcxz", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
911 { "je", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
912 { "jecxz", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
913 { "jg", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
914 { "jge", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
915 { "jl", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
916 { "jle", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
917 { "jmp", Op_Branch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
918 { "jmpe", Op_Branch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
919 { "jmpf", Op_Branch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
920 { "jna", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
921 { "jnae", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
922 { "jnb", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
923 { "jnbe", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
924 { "jnc", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
925 { "jne", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
926 { "jng", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
927 { "jnge", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
928 { "jnl", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
929 { "jnle", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
930 { "jno", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
931 { "jnp", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
932 { "jns", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
933 { "jnz", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
934 { "jo", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
935 { "jp", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
936 { "jpe", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
937 { "jpo", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
938 { "jrcxz", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
939 { "js", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
940 { "jz", Op_CBranch },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
941 { "lahf", Op_0_AX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
942 { "lar", Op_DstSrcFW }, // reg dest only
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
943 { "lddqu", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
944 { "ldmxcsr", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
945 { "lds", Op_DstSrc }, // reg dest only
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
946 { "lea", Op_DstSrc }, // "
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
947 { "leaq", Op_DstSrcSSE }, // "
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
948 { "leave", Op_0 }, // EBP,ESP clobbers
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
949 { "lfence",Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
950 { "lfs", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
951 { "lgdt", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
952 { "lgs", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
953 { "lidt", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
954 { "lldt", Op_SrcRMWNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
955 { "lmsw", Op_SrcRMWNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
956 { "lock", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
957 { "lods", Op_lods },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
958 { "lodsb", Op_lodsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
959 { "lodsd", Op_lodsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
960 { "lodsw", Op_lodsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
961 { "lodsq", Op_lodsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
962 { "loop", Op_Loop },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
963 { "loope", Op_Loop },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
964 { "loopne",Op_Loop },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
965 { "loopnz",Op_Loop },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
966 { "loopz", Op_Loop },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
967 { "lsl", Op_DstSrcFW }, // reg dest only
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
968 { "lss", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
969 { "ltr", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
970 { "maskmovdqu", Op_SrcSrcMMX }, // writes to [edi]
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
971 { "maskmovq", Op_SrcSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
972 { "maxpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
973 { "maxps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
974 { "maxsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
975 { "maxss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
976 { "mfence",Op_0},
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
977 { "minpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
978 { "minps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
979 { "minsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
980 { "minss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
981 { "monitor", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
982 { "mov", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
983 { "movapd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
984 { "movaps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
985 { "movb", Op_DstSrcNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
986 { "movd", Op_DstSrcNT }, // also mmx and sse
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
987 { "movddup", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
988 { "movdq2q", Op_DstSrcNT }, // mmx/sse
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
989 { "movdqa", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
990 { "movdqu", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
991 { "movhlps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
992 { "movhpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
993 { "movhps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
994 { "movl", Op_DstSrc },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
995 { "movlhps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
996 { "movlpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
997 { "movlps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
998 { "movmskpd",Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
999 { "movmskps",Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1000 { "movntdq", Op_DstSrcNT }, // limited to sse, but mem dest
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1001 { "movnti", Op_DstSrcNT }, // limited to gpr, but mem dest
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1002 { "movntpd", Op_DstSrcNT }, // limited to sse, but mem dest
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1003 { "movntps", Op_DstSrcNT }, // limited to sse, but mem dest
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1004 { "movntq", Op_DstSrcNT }, // limited to mmx, but mem dest
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1005 { "movq", Op_DstSrcNT }, // limited to sse and mmx
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1006 { "movq2dq", Op_DstSrcNT }, // limited to sse <- mmx regs
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1007 { "movs", Op_movs },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1008 { "movsb", Op_movsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1009 { "movsd", Op_movsd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1010 { "movsq", Op_movsd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1011 { "movshdup", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1012 { "movsldup", Op_DstSrcSSE },
970
fb31a4afa2df Revert wilsonk's "fix" for the callingconv1.d problem.
Frits van Bommel <fvbommel wxs.nl>
parents: 966
diff changeset
1013 { "movss", Op_DstSrcSSE },
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1014 { "movsw", Op_movsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1015 { "movsx", Op_movsx }, // word-only, reg dest
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1016 { "movsxd", Op_movsx },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1017 { "movupd",Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1018 { "movups",Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1019 { "movzbl", Op_DstSrcNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1020 { "movzx", Op_movzx },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1021 { "mul", Op_DstSrcNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1022 { "mulpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1023 { "mulps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1024 { "mulsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1025 { "mulss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1026 { "mwait", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1027 { "naked", Op_Naked },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1028 { "neg", Op_UpdF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1029 { "nop", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1030 { "not", Op_Upd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1031 { "or", Op_UpdSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1032 { "orpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1033 { "orps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1034 { "out", Op_out },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1035 { "outs", Op_outs },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1036 { "outsb", Op_outsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1037 { "outsd", Op_outsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1038 { "outsw", Op_outsX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1039 { "pabsb", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1040 { "pabsw", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1041 { "pabsq", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1042 { "packssdw", Op_DstSrcMMX }, // %% also SSE
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1043 { "packsswb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1044 { "packuswb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1045 { "paddb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1046 { "paddd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1047 { "paddq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1048 { "paddsb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1049 { "paddsw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1050 { "paddusb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1051 { "paddusw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1052 { "paddw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1053 { "palignr", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1054 { "pand", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1055 { "pandn", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1056 { "pause", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1057 { "pavgb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1058 { "pavgw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1059 { "pcmpeqb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1060 { "pcmpeqd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1061 { "pcmpeqw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1062 { "pcmpgtb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1063 { "pcmpgtd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1064 { "pcmpgtw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1065 { "pextrw", Op_DstSrcImmM }, // gpr32 dest
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1066 { "phaddd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1067 { "phaddsw", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1068 { "phaddw", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1069 { "phsubd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1070 { "phsubsw", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1071 { "phsubw", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1072 { "pinsrw", Op_DstSrcImmM }, // gpr32(16), mem16 src, sse too
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1073 { "pmaddubsw", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1074 { "pmaddwd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1075 { "pmaxsw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1076 { "pmaxub", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1077 { "pminsw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1078 { "pminub", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1079 { "pmovmskb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1080 { "pmulhrsw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1081 { "pmulhuw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1082 { "pmulhw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1083 { "pmullw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1084 { "pmuludq", Op_DstSrcMMX }, // also sse
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1085 { "popf", Op_SizedStack }, // rewrite the insn with a special case
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1086 { "popfq", Op_SizedStack },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1087 { "popq", Op_push },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1088 { "por", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1089 { "prefetchnta", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1090 { "prefetcht0", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1091 { "prefetcht1", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1092 { "prefetcht2", Op_SrcMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1093 { "psadbw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1094 { "pshufb", Op_DstSrcImmM },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1095 { "pshufd", Op_DstSrcImmM },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1096 { "pshufhw", Op_DstSrcImmM },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1097 { "pshuflw", Op_DstSrcImmM },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1098 { "pshufw", Op_DstSrcImmM },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1099 { "psignb", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1100 { "psignd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1101 { "psignw", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1102 { "pslld", Op_DstSrcMMX }, // immediate operands...
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1103 { "pslldq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1104 { "psllq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1105 { "psllw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1106 { "psrad", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1107 { "psraw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1108 { "psrld", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1109 { "psrldq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1110 { "psrlq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1111 { "psrlw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1112 { "psubb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1113 { "psubd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1114 { "psubq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1115 { "psubsb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1116 { "psubsw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1117 { "psubusb", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1118 { "psubusw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1119 { "psubw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1120 { "punpckhbw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1121 { "punpckhdq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1122 { "punpckhqdq",Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1123 { "punpckhwd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1124 { "punpcklbw", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1125 { "punpckldq", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1126 { "punpcklqdq",Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1127 { "punpcklwd", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1128 { "pushf", Op_SizedStack },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1129 { "pushfq", Op_SizedStack },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1130 { "pushq", Op_push },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1131 { "pxor", Op_DstSrcMMX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1132 { "rcl", Op_Shift }, // limited src operands -- change to shift
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1133 { "rcpps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1134 { "rcpss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1135 { "rcr", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1136 { "rdmsr", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1137 { "rdpmc", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1138 { "rdtsc", Op_0_DXAX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1139 { "rep", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1140 { "repe", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1141 { "repne", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1142 { "repnz", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1143 { "repz", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1144 { "ret", Op_ret },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1145 { "retf", Op_retf },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1146 { "retn", Op_retf },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1147 { "rol", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1148 { "ror", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1149 { "rsm", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1150 { "rsqrtps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1151 { "rsqrtss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1152 { "sahf", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1153 { "sal", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1154 { "salq", Op_DstSrcNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1155 { "sar", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1156 { "sbb", Op_UpdSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1157 { "scas", Op_scas },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1158 { "scasb", Op_scasX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1159 { "scasd", Op_scasX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1160 { "scasw", Op_scasX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1161 { "scasq", Op_scasX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1162 { "seta", Op_DstRMBNT }, // also gpr8
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1163 { "setae", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1164 { "setb", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1165 { "setbe", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1166 { "setc", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1167 { "sete", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1168 { "setg", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1169 { "setge", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1170 { "setl", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1171 { "setle", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1172 { "setna", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1173 { "setnae", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1174 { "setnb", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1175 { "setnbe", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1176 { "setnc", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1177 { "setne", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1178 { "setng", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1179 { "setnge", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1180 { "setnl", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1181 { "setnle", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1182 { "setno", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1183 { "setnp", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1184 { "setns", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1185 { "setnz", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1186 { "seto", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1187 { "setp", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1188 { "setpe", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1189 { "setpo", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1190 { "sets", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1191 { "setz", Op_DstRMBNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1192 { "sfence", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1193 { "sgdt", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1194 { "shl", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1195 { "shld", Op_UpdSrcShft },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1196 { "shr", Op_Shift },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1197 { "shrd", Op_UpdSrcShft },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1198 { "shufpd", Op_DstSrcImmS },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1199 { "shufps", Op_DstSrcImmS },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1200 { "sidt", Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1201 { "sldt", Op_DstRMWNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1202 { "smsw", Op_DstRMWNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1203 { "sqrtpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1204 { "sqrtps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1205 { "sqrtsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1206 { "sqrtss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1207 { "stc", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1208 { "std", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1209 { "sti", Op_Flags },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1210 { "stmxcsr",Op_DstMemNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1211 { "stos", Op_stos },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1212 { "stosb", Op_stosX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1213 { "stosd", Op_stosX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1214 { "stosw", Op_stosX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1215 { "stosq", Op_stosX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1216 { "str", Op_DstMemNT }, // also r16
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1217 { "sub", Op_UpdSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1218 { "subpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1219 { "subps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1220 { "subq", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1221 { "subsd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1222 { "subss", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1223 { "swapgs", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1224 { "sysenter",Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1225 { "sysexit", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1226 { "sysret", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1227 { "testl", Op_DstSrcNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1228 { "ucomisd", Op_SrcSrcSSEF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1229 { "ucomiss", Op_SrcSrcSSEF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1230 { "ud2", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1231 { "unpckhpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1232 { "unpckhps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1233 { "unpcklpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1234 { "unpcklps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1235 { "verr", Op_SrcMemNTF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1236 { "verw", Op_SrcMemNTF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1237 { "wbinvd", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1238 { "wrmsr", Op_0 },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1239 { "xadd", Op_UpdUpdF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1240 { "xchg", Op_UpdUpd },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1241 { "xlat", Op_xlat },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1242 { "xlatb", Op_0_AX },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1243 { "xor", Op_DstSrcF },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1244 { "xorpd", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1245 { "xorps", Op_DstSrcSSE },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1246 { "xorq", Op_DstSrcNT },
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1247 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1248
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1249 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1250 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1251 Default_Ptr = 0,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1252 Byte_Ptr = 1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1253 Short_Ptr = 2,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1254 Int_Ptr = 4,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1255 QWord_Ptr = 8,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1256 Float_Ptr = 4,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1257 Double_Ptr = 8,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1258 Extended_Ptr = 10,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1259 Near_Ptr = 98,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1260 Far_Ptr = 99,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1261 N_PtrTypes
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1262 } PtrType;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1263
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1264 static const int N_PtrNames = 8;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1265 static const char * ptrTypeNameTable[N_PtrNames] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1266 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1267 "word", "dword", "qword",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1268 "float", "double", "extended",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1269 "near", "far"
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1270 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1271
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1272 static Identifier * ptrTypeIdentTable[N_PtrNames];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1273 static PtrType ptrTypeValueTable[N_PtrNames] =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1274 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1275 Short_Ptr, Int_Ptr, QWord_Ptr,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1276 Float_Ptr, Double_Ptr, Extended_Ptr,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1277 Near_Ptr, Far_Ptr
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1278 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1279
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1280 typedef enum
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1281 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1282 Opr_Invalid,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1283 Opr_Immediate,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1284 Opr_Reg,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1285 Opr_Mem
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1286 } OperandClass;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1287
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1288 /* kill inlining if we reference a local? */
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1289
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1290 /* DMD seems to allow only one 'symbol' per operand .. include __LOCAL_SIZE */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1291
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1292 /* DMD offset usage: <parm>[<reg>] seems to always be relative to EBP+8 .. even
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1293 if naked.. */
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1294
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1295 // mov eax, 4
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1296 // mov eax, fs:4
871
e70a0e7e2260 Apply duane's patch for align power-of-two checking in inline asm. Fixes #159
Christian Kamm <kamm incasoftware de>
parents: 793
diff changeset
1297 // -- have to assume we know whether or not to use '$'
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1298
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1299 static Token eof_tok;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1300 static Expression * Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1301 static Identifier * ident_seg;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1302
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1303 struct AsmProcessor
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1304 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1305 typedef struct
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1306 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1307 int inBracket;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1308 int hasBracket;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1309 int hasNumber;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1310 int isOffset;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1311
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1312 Reg segmentPrefix;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1313 Reg reg;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1314 sinteger_t constDisplacement; // use to build up.. should be int constant in the end..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1315 Array symbolDisplacement; // array of expressions or..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1316 Reg baseReg;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1317 Reg indexReg;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1318 int scale;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1319
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1320 OperandClass cls;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1321 PtrType dataSize;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1322 PtrType dataSizeHint; // DMD can use the type of a referenced variable
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1323 } Operand;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1324
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1325 static const unsigned Max_Operands = 3;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1326
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1327 AsmStatement * stmt;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1328 Scope * sc;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1329
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1330 Token * token;
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1331 std::ostringstream insnTemplate;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1332
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1333 AsmOp op;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1334 AsmOpInfo * opInfo;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1335 Operand operands[Max_Operands];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1336 Identifier * opIdent;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1337 Operand * operand;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1338
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1339 AsmProcessor ( Scope * sc, AsmStatement * stmt )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1340 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1341 this->sc = sc;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1342 this->stmt = stmt;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1343 token = stmt->tokens;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1344
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1345 opInfo = NULL;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1346
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1347 if ( ! regInfo[0].ident )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1348 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1349 char buf[8], *p;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1350
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1351 for ( int i = 0; i < N_Regs; i++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1352 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1353 strncpy ( buf, regInfo[i].name, sizeof ( buf ) - 1 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1354 for ( p = buf; *p; p++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1355 *p = std::tolower ( *p );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1356 regInfo[i].gccName = std::string ( buf, p - buf );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1357 if ( ( i <= Reg_ST || i > Reg_ST7 ) && i != Reg_EFLAGS )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1358 regInfo[i].ident = Lexer::idPool ( regInfo[i].name );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1359 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1360
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1361 for ( int i = 0; i < N_PtrNames; i++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1362 ptrTypeIdentTable[i] = Lexer::idPool ( ptrTypeNameTable[i] );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1363
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1364 Handled = new Expression ( 0, TOKvoid, sizeof ( Expression ) );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1365
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1366 ident_seg = Lexer::idPool ( "seg" );
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1367
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1368 eof_tok.value = TOKeof;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1369 eof_tok.next = 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1370 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1371 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1372
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1373 void run()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1374 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1375 parse();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1376 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1377
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1378 void nextToken()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1379 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1380 if ( token->next )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1381 token = token->next;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1382 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1383 token = & eof_tok;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1384 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1385
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1386 Token * peekToken()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1387 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1388 if ( token->next )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1389 return token->next;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1390 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1391 return & eof_tok;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1392 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1393
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1394 void expectEnd()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1395 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1396 if ( token->value != TOKeof )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1397 stmt->error ( "expected end of statement" ); // %% extra at end...
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1398 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1399
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1400 void parse()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1401 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1402 op = parseOpcode();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1403
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1404 switch ( op )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1405 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1406 case Op_Align:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1407 doAlign();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1408 expectEnd();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1409 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1410 case Op_Even:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1411 doEven();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1412 expectEnd();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1413 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1414 case Op_Naked:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1415 doNaked();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1416 expectEnd();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1417 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1418 case Op_Invalid:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1419 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1420 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1421 if ( op >= Op_db && op <= Op_de )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1422 doData();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1423 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1424 doInstruction();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1425 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1426 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1427
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1428 AsmOp parseOpcode()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1429 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1430 static const int N_ents = sizeof ( opData ) /sizeof ( AsmOpEnt );
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1431
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1432 switch ( token->value )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1433 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1434 case TOKalign:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1435 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1436 return Op_Align;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1437 case TOKin:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1438 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1439 opIdent = Id::___in;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1440 return Op_in;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1441 case TOKint32: // "int"
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1442 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1443 opIdent = Id::__int;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1444 return Op_SrcImm;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1445 case TOKout:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1446 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1447 opIdent = Id::___out;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1448 return Op_out;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1449 case TOKidentifier:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1450 // search for mnemonic below
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1451 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1452 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1453 stmt->error ( "expected opcode" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1454 return Op_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1455 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1456
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1457 opIdent = token->ident;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1458 const char * opcode = token->ident->string;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1459
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1460 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1461
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1462 // %% okay to use bsearch?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1463 int i = 0, j = N_ents, k, l;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1464 do
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1465 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1466 k = ( i + j ) / 2;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1467 l = strcmp ( opcode, opData[k].inMnemonic );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1468 if ( ! l )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1469 return opData[k].asmOp;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1470 else if ( l < 0 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1471 j = k;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1472 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1473 i = k + 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1474 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1475 while ( i != j );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1476
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1477 stmt->error ( "unknown opcode '%s'", opcode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1478
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1479 return Op_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1480 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1481
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1482 // need clobber information.. use information is good too...
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1483 void doInstruction()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1484 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1485 bool ok = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1486 unsigned operand_i = 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1487
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1488 opInfo = & asmOpInfo[op];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1489 memset ( operands, 0, sizeof ( operands ) );
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1490
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1491 if ( token->value == TOKeof && ( op == Op_FMath0) )
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1492 {
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1493 for ( operand_i = 0; operand_i < 1; operand_i++)
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1494 {
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1495 operand = & operands[operand_i];
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1496 operand->reg = operand->baseReg = operand->indexReg =
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1497 operand->segmentPrefix = Reg_Invalid;
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1498
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1499 operand->cls = Opr_Reg;
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1500 if ( operand_i == 0)
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1501 {
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1502 operand->reg = Reg_ST;
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1503 }
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1504 else
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1505 {
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1506 operand->reg = Reg_ST1;
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1507 }
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1508 operand->hasNumber = 0;
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1509 operand->constDisplacement = 0;
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1510 parseOperand();
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1511
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1512 if ( matchOperands ( operand_i ) )
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1513 {
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1514 AsmCode * asmcode = new AsmCode ( N_Regs );
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1515
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1516 if ( formatInstruction ( operand_i, asmcode ) )
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1517 stmt->asmcode = ( code * ) asmcode;
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1518 }
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1519 }
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1520 return;
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1521 }
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1522
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1523 while ( token->value != TOKeof )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1524 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1525 if ( operand_i < Max_Operands )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1526 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1527 operand = & operands[operand_i];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1528 operand->reg = operand->baseReg = operand->indexReg =
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1529 operand->segmentPrefix = Reg_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1530 parseOperand();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1531 operand_i++;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1532 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1533 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1534 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1535 ok = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1536 stmt->error ( "too many operands for instruction" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1537 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1538 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1539
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1540 if ( token->value == TOKcomma )
1078
9c63438c3207 Fix for asm { jle short Lret; }, used by Tango since dmd accepts the 'short'. We just
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1059
diff changeset
1541 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1542 nextToken();
1078
9c63438c3207 Fix for asm { jle short Lret; }, used by Tango since dmd accepts the 'short'. We just
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1059
diff changeset
1543 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1544 else if ( token->value != TOKeof )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1545 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1546 ok = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1547 stmt->error ( "expected comma after operand" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1548 return;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1549 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1550 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1551 // if (operand_i < opInfo->minOperands) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1552 // ok = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1553 // stmt->error("too few operands for instruction");
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1554 // }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1555
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1556 if ( matchOperands ( operand_i ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1557 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1558 AsmCode * asmcode = new AsmCode ( N_Regs );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1559
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1560 if ( formatInstruction ( operand_i, asmcode ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1561 stmt->asmcode = ( code * ) asmcode;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1562 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1563 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1564
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1565 void setAsmCode()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1566 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1567 AsmCode * asmcode = new AsmCode ( N_Regs );
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1568 asmcode->insnTemplate = insnTemplate.str();
1109
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
1569 Logger::cout() << "insnTemplate = " << asmcode->insnTemplate << '\n';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1570 stmt->asmcode = ( code* ) asmcode;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1571 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1572
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1573 // note: doesn't update AsmOp op
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1574 bool matchOperands ( unsigned nOperands )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1575 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1576 bool wrong_number = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1577
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1578 for ( unsigned i = 0; i < nOperands; i++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1579 classifyOperand ( & operands[i] );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1580
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1581 while ( 1 )
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1582 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1583 if ( nOperands == opInfo->nOperands() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1584 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1585 wrong_number = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1586 /* Cases in which number of operands is not
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1587 enough for a match: Op_FCmp/Op_FCmp1,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1588 Op_FCmpP/Op_FCmpP1 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1589 for ( unsigned i = 0; i < nOperands; i++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1590 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1591 Operand * operand = & operands[i];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1592
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1593 switch ( opInfo->operands[i] & Opr_ClassMask )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1594 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1595 case OprC_Mem: // no FPMem currently
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1596 if ( operand->cls != Opr_Mem )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1597 goto no_match;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1598 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1599 case OprC_RFP:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1600 if ( ! ( operand->reg >= Reg_ST && operand->reg <= Reg_ST7 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1601 goto no_match;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1602 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1603 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1604 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1605 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1606 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1607
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1608 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1609 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1610 no_match:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1611 if ( opInfo->linkType == Next_Form )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1612 opInfo = & asmOpInfo[ op = ( AsmOp ) opInfo->link ];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1613 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1614 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1615 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1616 if ( wrong_number )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1617 stmt->error ( "wrong number of operands" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1618 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1619 stmt->error ( "wrong operand types" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1620 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1621 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1622
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1623 void addOperand ( const char * fmt, AsmArgType type, Expression * e, AsmCode * asmcode, AsmArgMode mode = Mode_Input )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1624 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1625 if ( sc->func->naked )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1626 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1627 switch ( type )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1628 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1629 case Arg_Integer:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1630 if ( e->type->isunsigned() )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1631 insnTemplate << "$" << e->toUInteger();
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1632 else
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1633 insnTemplate << "$" << e->toInteger();
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1634 break;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1635
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1636 case Arg_Pointer:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1637 stmt->error ( "unsupported pointer reference to '%s' in naked asm", e->toChars() );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1638 break;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1639
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1640 case Arg_Memory:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1641 if ( e->op == TOKvar )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1642 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1643 VarExp* v = ( VarExp* ) e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1644 if ( VarDeclaration* vd = v->var->isVarDeclaration() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1645 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1646 if ( !vd->isDataseg() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1647 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1648 stmt->error ( "only global variables can be referenced by identifier in naked asm" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1649 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1650 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1651
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1652 // osx needs an extra underscore
1190
ea7b8b6c96c0 Some more fixups for mingw -- missing underscores
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1109
diff changeset
1653 if ( global.params.os == OSMacOSX || global.params.os == OSWindows )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1654 insnTemplate << "_";
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1655
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1656 // print out the mangle
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1657 insnTemplate << vd->mangle();
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1658 vd->nakedUse = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1659 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1660 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1661 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1662 stmt->error ( "unsupported memory reference to '%s' in naked asm", e->toChars() );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1663 break;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1664
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1665 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1666 assert ( 0 && "asm unsupported arg" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1667 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1668 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1669 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1670 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1671 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1672 insnTemplate << fmt
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1673 << "<<" << (mode==Mode_Input ? "in" : "out") << asmcode->args.size() << ">>";
1101
8bf8b058944a Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents: 1100
diff changeset
1674 asmcode->args.push_back ( AsmArg ( type, e, mode ) );
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1675 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1676 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1677 void addOperand2 ( const char * fmtpre, const char * fmtpost, AsmArgType type, Expression * e, AsmCode * asmcode, AsmArgMode mode = Mode_Input )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1678 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1679 assert ( !sc->func->naked );
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1680 insnTemplate << fmtpre
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1681 << "<<" << (mode==Mode_Input ? "in" : "out") << ">>"
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1682 << fmtpost;
1101
8bf8b058944a Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents: 1100
diff changeset
1683 asmcode->args.push_back ( AsmArg ( type, e, mode ) );
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1684 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1685
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1686 void addLabel ( char* id )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1687 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1688 insnTemplate << sc->func->mangle() << "_" << id;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1689 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1690
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1691 /* Determines whether the operand is a register, memory reference
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1692 or immediate. Immediate addresses are currently classified as
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1693 memory. This function is called before the exact instructions
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1694 is known and thus, should not use opInfo. */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1695 void classifyOperand ( Operand * operand )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1696 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1697 operand->cls = classifyOperand1 ( operand );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1698 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1699
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1700 OperandClass classifyOperand1 ( Operand * operand )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1701 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1702 bool is_localsize = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1703 bool really_have_symbol = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1704
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1705 if ( operand->symbolDisplacement.dim )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1706 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1707 is_localsize = isLocalSize ( ( Expression * ) operand->symbolDisplacement.data[0] );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1708 really_have_symbol = ! is_localsize;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1709 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1710
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1711 if ( operand->isOffset && ! operand->hasBracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1712 return Opr_Immediate;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1713
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1714 if ( operand->hasBracket || really_have_symbol ) // %% redo for 'offset' function
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1715 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1716 if ( operand->reg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1717 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1718 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1719 return Opr_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1720 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1721
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1722 return Opr_Mem;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1723 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1724
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1725 if ( operand->reg != Reg_Invalid && operand->constDisplacement != 0 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1726 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1727 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1728 return Opr_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1729 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1730
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1731 if ( operand->segmentPrefix != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1732 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1733 if ( operand->reg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1734 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1735 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1736 return Opr_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1737 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1738
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1739 return Opr_Mem;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1740 }
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1741
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1742 if ( operand->reg != Reg_Invalid && ! operand->hasNumber )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1743 return Opr_Reg;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1744
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1745 // should check immediate given (operand->hasNumber);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1746 //
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1747 if ( operand->hasNumber || is_localsize )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1748 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1749 // size determination not correct if there are symbols Opr_Immediate
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1750 if ( operand->dataSize == Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1751 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1752 if ( operand->constDisplacement < 0x100 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1753 operand->dataSize = Byte_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1754 else if ( operand->constDisplacement < 0x10000 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1755 operand->dataSize = Short_Ptr;
966
e7dd879caae5 Reduce size of integer constant make x86-64 asm parsing code compile on x86-32.
Christian Kamm <kamm incasoftware de>
parents: 963
diff changeset
1756 else if ( operand->constDisplacement <= 0xFFFFFFFF )
962
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
1757 operand->dataSize = Int_Ptr;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1758 else
962
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
1759 //This could be possible since we are using 48 bits
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
1760 operand->dataSize = QWord_Ptr;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1761 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1762 return Opr_Immediate;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1763 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1764
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1765 // probably a bug,?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1766 stmt->error ( "invalid operand" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1767 return Opr_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1768 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1769
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1770 void writeReg ( Reg reg )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1771 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1772 insnTemplate << "%" << regInfo[reg].gccName;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1773 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1774
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1775 bool opTakesLabel()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1776 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1777 switch ( op )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1778 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1779 case Op_Branch:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1780 case Op_CBranch:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1781 case Op_Loop:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1782 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1783 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1784 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1785 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1786 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
1787
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1788 bool getTypeChar ( TypeNeeded needed, PtrType ptrtype, char & type_char )
920
545f54041d91 Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 871
diff changeset
1789 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1790 switch ( needed )
920
545f54041d91 Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 871
diff changeset
1791 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1792 case Byte_NoType:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1793 return ptrtype == Byte_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1794 case Word_Types:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1795 if ( ptrtype == Byte_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1796 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1797 // drop through
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1798 case Int_Types:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1799 switch ( ptrtype )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1800 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1801 case Byte_Ptr: type_char = 'b'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1802 case Short_Ptr: type_char = 'w'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1803 case Int_Ptr: type_char = 'l'; break;
962
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
1804 case QWord_Ptr: type_char = 'q'; break;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1805 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1806 // %% these may be too strict
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1807 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1808 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1809 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1810 case FPInt_Types:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1811 switch ( ptrtype )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1812 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1813 case Short_Ptr: type_char = 0; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1814 case Int_Ptr: type_char = 'l'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1815 case QWord_Ptr: type_char = 'q'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1816 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1817 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1818 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1819 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1820 case FP_Types:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1821 switch ( ptrtype )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1822 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1823 case Float_Ptr: type_char = 's'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1824 case Double_Ptr: type_char = 'l'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1825 case Extended_Ptr: type_char = 't'; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1826 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1827 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1828 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1829 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1830 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1831 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1832 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1833 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1834 }
920
545f54041d91 Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 871
diff changeset
1835
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1836 // also set impl clobbers
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1837 bool formatInstruction ( int nOperands, AsmCode * asmcode )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1838 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1839 const char *fmt;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1840 const char *mnemonic;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1841 char type_char = 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1842 bool use_star;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1843 AsmArgMode mode;
920
545f54041d91 Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 871
diff changeset
1844
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1845 insnTemplate.str("");
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1846 // %% todo: special case for something..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1847 if ( opInfo->linkType == Out_Mnemonic )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1848 mnemonic = alternateMnemonics[opInfo->link];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1849 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1850 mnemonic = opIdent->string;
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1851
1320
1ad5a58b5c9d Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents: 1310
diff changeset
1852 // handle two-operand form where second arg is ignored.
1ad5a58b5c9d Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents: 1310
diff changeset
1853 // must be done before type_char detection
1ad5a58b5c9d Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents: 1310
diff changeset
1854 if ( op == Op_FidR_P || op == Op_fxch || op == Op_FfdRR_P )
1ad5a58b5c9d Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents: 1310
diff changeset
1855 {
1ad5a58b5c9d Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents: 1310
diff changeset
1856 if (operands[1].cls == Opr_Reg && operands[1].reg == Reg_ST )
1ad5a58b5c9d Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents: 1310
diff changeset
1857 nOperands = 1;
1ad5a58b5c9d Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents: 1310
diff changeset
1858 else
1ad5a58b5c9d Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents: 1310
diff changeset
1859 stmt->error("instruction allows only ST as second argument");
1ad5a58b5c9d Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents: 1310
diff changeset
1860 }
1ad5a58b5c9d Restrict second arg of certain floating-point stores to ST. Fix type postfix
Christian Kamm <kamm incasoftware de>
parents: 1310
diff changeset
1861
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1862 if ( opInfo->needsType )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1863 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1864 PtrType exact_type = Default_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1865 PtrType min_type = Default_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1866 PtrType hint_type = Default_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1867
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1868 /* Default types: This attempts to match the observed behavior of DMD */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1869 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
1870 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1871 case Int_Types: min_type = Byte_Ptr; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1872 case Word_Types: min_type = Short_Ptr; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1873 case FPInt_Types:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1874 if ( op == Op_Fis_ST ) // integer math instructions
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1875 min_type = Int_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1876 else // compare, load, store
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1877 min_type = Short_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1878 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1879 case FP_Types: min_type = Float_Ptr; break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1880 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1881 if ( op == Op_push && operands[0].cls == Opr_Immediate )
962
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
1882 min_type = QWord_Ptr;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1883
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1884 for ( int i = 0; i < nOperands; i++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1885 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1886 if ( hint_type == Default_Ptr &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1887 ! ( opInfo->operands[i] & Opr_NoType ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1888 hint_type = operands[i].dataSizeHint;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1889
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1890 if ( ( opInfo->operands[i] & Opr_NoType ) ||
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1891 operands[i].dataSize == Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1892 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1893 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
1894 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1895 min_type = operands[i].dataSize > min_type ?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1896 operands[i].dataSize : min_type;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1897 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1898 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1899 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1900 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
1901 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
1902 }
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
1903 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1904
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1905 bool type_ok;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1906 if ( exact_type == Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1907 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1908 type_ok = getTypeChar ( ( TypeNeeded ) opInfo->needsType, hint_type, type_char );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1909 if ( ! type_ok )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1910 type_ok = getTypeChar ( ( TypeNeeded ) opInfo->needsType, min_type, type_char );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1911 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1912 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1913 type_ok = getTypeChar ( ( TypeNeeded ) opInfo->needsType, exact_type, type_char );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1914
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1915 if ( ! type_ok )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1916 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1917 stmt->error ( "invalid operand size" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1918 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1919 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1920 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1921 else if ( op == Op_Branch )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1922 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1923 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
1924 insnTemplate << 'l';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1925 }
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1926 else if ( op == Op_FMath0 || op == Op_FdST0ST1 )
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1927 {
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1928 operands[0].cls = Opr_Reg;
1301
1e30cc395d2e fix wrong arg order for fmul/fadd
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1190
diff changeset
1929 operands[0].reg = Reg_ST1;
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1930 operands[1].cls = Opr_Reg;
1301
1e30cc395d2e fix wrong arg order for fmul/fadd
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1190
diff changeset
1931 operands[1].reg = Reg_ST;
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1932 nOperands = 2;
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
1933 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1934
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1935 switch ( op )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1936 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1937 case Op_SizedStack:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1938 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1939 int mlen = strlen ( mnemonic );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1940 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
1941 insnTemplate.write(mnemonic, mlen-1);
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1942 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1943 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1944 insnTemplate << mnemonic << 'w';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1945 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1946 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1947 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1948 case Op_cmpsd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1949 case Op_insX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1950 case Op_lodsX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1951 case Op_movsd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1952 case Op_outsX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1953 case Op_scasX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1954 case Op_stosX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1955 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1956 int mlen = strlen ( mnemonic );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1957 if ( mnemonic[mlen-1] == 'd' )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1958 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1959 insnTemplate.write(mnemonic, mlen-1) << 'l';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1960 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1961 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1962 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1963 insnTemplate << mnemonic;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1964 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1965 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1966 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1967 case Op_movsx:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1968 case Op_movzx:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1969 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1970 char tc_1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1971 int mlen = strlen ( mnemonic );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1972 PtrType op1_size = operands[1].dataSize;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1973 if ( op1_size == Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1974 op1_size = operands[1].dataSizeHint;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1975 // Need type char for source arg
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1976 switch ( op1_size )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1977 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1978 case Byte_Ptr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1979 case Default_Ptr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1980 tc_1 = 'b';
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1981 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1982 case Short_Ptr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1983 tc_1 = 'w';
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1984 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1985 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1986 stmt->error ( "invalid operand size/type" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1987 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1988 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1989 assert ( type_char != 0 );
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
1990 insnTemplate.write(mnemonic, mlen-1) << tc_1 << type_char;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1991 }
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
1992 break;
1303
c250e03d8a5b Make the no-operand versions of floating point inline asm instructions always
Christian Kamm <kamm incasoftware de>
parents: 1302
diff changeset
1993
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
1994 default:
1302
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1995 // special case fdiv, fsub: see dmd 840, ldc 256
1310
85b80c4fe48a Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents: 1304
diff changeset
1996 if ((strncmp(mnemonic, "fsub", 4) == 0 ||
85b80c4fe48a Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents: 1304
diff changeset
1997 strncmp(mnemonic, "fdiv", 4) == 0) &&
1325
5a9dc345c70a Yet another fdiv/fsub special case.
Christian Kamm <kamm incasoftware de>
parents: 1320
diff changeset
1998 operands[0].reg != Reg_ST && op != Op_FMath)
1302
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
1999 {
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2000 // replace:
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2001 // 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
2002 if (mnemonic[4] == 'r')
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2003 {
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2004 insnTemplate.write(mnemonic, 4);
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2005 insnTemplate.write(mnemonic+5, strlen(mnemonic)-5);
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2006 }
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2007 else
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2008 {
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2009 insnTemplate.write(mnemonic, 4) << "r";
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2010 insnTemplate.write(mnemonic+4, strlen(mnemonic)-4);
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2011 }
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2012 }
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2013 else
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2014 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2015 insnTemplate << mnemonic;
1302
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2016 }
1310
85b80c4fe48a Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents: 1304
diff changeset
2017 // the no-operand versions of floating point ops always pop
85b80c4fe48a Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents: 1304
diff changeset
2018 if (op == Op_FMath0)
85b80c4fe48a Fix certain cases of floating point instruction mistranslation.
Christian Kamm <kamm incasoftware de>
parents: 1304
diff changeset
2019 insnTemplate << "p";
1302
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2020 if ( type_char )
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2021 insnTemplate << type_char;
a26b99b7e293 Translate fsub/fdiv correctly. See #256.
Christian Kamm <kamm incasoftware de>
parents: 1301
diff changeset
2022 break;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2023 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2024
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2025 switch ( opInfo->implicitClobbers & Clb_DXAX_Mask )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2026 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2027 case Clb_SizeAX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2028 case Clb_EAX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2029 asmcode->regs[Reg_EAX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2030 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2031 case Clb_SizeDXAX:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2032 asmcode->regs[Reg_EAX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2033 if ( type_char != 'b' )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2034 asmcode->regs[Reg_EDX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2035 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2036 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2037 // nothing
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2038 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2039 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2040
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2041 if ( opInfo->implicitClobbers & Clb_DI )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2042 asmcode->regs[Reg_EDI] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2043 if ( opInfo->implicitClobbers & Clb_SI )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2044 asmcode->regs[Reg_ESI] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2045 if ( opInfo->implicitClobbers & Clb_CX )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2046 asmcode->regs[Reg_ECX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2047 if ( opInfo->implicitClobbers & Clb_SP )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2048 asmcode->regs[Reg_ESP] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2049 if ( opInfo->implicitClobbers & Clb_ST )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2050 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2051 /* Can't figure out how to tell GCC that an
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2052 asm statement leaves an arg pushed on the stack.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2053 Maybe if the statment had and input or output
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2054 operand it would work... In any case, clobbering
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2055 all FP prevents incorrect code generation. */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2056 asmcode->regs[Reg_ST] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2057 asmcode->regs[Reg_ST1] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2058 asmcode->regs[Reg_ST2] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2059 asmcode->regs[Reg_ST3] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2060 asmcode->regs[Reg_ST4] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2061 asmcode->regs[Reg_ST5] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2062 asmcode->regs[Reg_ST6] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2063 asmcode->regs[Reg_ST7] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2064 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2065 if ( opInfo->implicitClobbers & Clb_Flags )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2066 asmcode->regs[Reg_EFLAGS] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2067 if ( op == Op_cpuid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2068 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2069 asmcode->regs[Reg_EAX] = true;
1095
d6bd818212de Add missing EBX clobber to CPUID asm instruction.
Frits van Bommel <fvbommel wxs.nl>
parents: 1093
diff changeset
2070 asmcode->regs[Reg_EBX] = true;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2071 asmcode->regs[Reg_ECX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2072 asmcode->regs[Reg_EDX] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2073 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2074
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2075 insnTemplate << ' ';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2076 for ( int i__ = 0; i__ < nOperands; i__++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2077 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2078 int i;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2079 if ( i__ != 0 )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2080 insnTemplate << ", ";
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2081
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2082 fmt = "$";
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2083
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2084 switch ( op )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2085 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2086 case Op_mul:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2087 // gas won't accept the two-operand form; skip to the source operand
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2088 i__ = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2089 // drop through
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2090 case Op_bound:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2091 case Op_enter:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2092 i = i__;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2093 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2094 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2095 i = nOperands - 1 - i__; // operand = & operands[ nOperands - 1 - i ];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2096 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2097 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2098 operand = & operands[ i ];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2099
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2100 switch ( operand->cls )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2101 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2102 case Opr_Immediate:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2103 // for implementing offset:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2104 // $var + $7 // fails
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2105 // $var + 7 // ok
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2106 // $7 + $var // ok
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2107
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2108 // DMD doesn't seem to allow this
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2109 /*
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2110 if (opInfo->takesLabel()) tho... (near ptr <Number> would be abs?)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2111 fmt = "$a"; // GAS won't accept "jmp $42"; must be "jmp 42" (rel) or "jmp *42" (abs)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2112 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2113 if ( opTakesLabel() /*opInfo->takesLabel()*/ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2114 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2115 // "relative addressing not allowed in branch instructions" ..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2116 stmt->error ( "integer constant not allowed in branch instructions" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2117 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2118 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2119
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2120 if ( operand->symbolDisplacement.dim &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2121 isLocalSize ( ( Expression * ) operand->symbolDisplacement.data[0] ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2122 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2123 // handle __LOCAL_SIZE, which in this constant, is an immediate
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2124 // should do this in slotexp..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2125 addOperand ( "$", Arg_LocalSize,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2126 ( Expression * ) operand->symbolDisplacement.data[0], asmcode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2127 if ( operand->constDisplacement )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2128 insnTemplate << '+';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2129 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2130 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2131 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2132
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2133 if ( operand->symbolDisplacement.dim )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2134 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2135 fmt = "$a";
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2136 addOperand ( "$", Arg_Pointer,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2137 ( Expression * ) operand->symbolDisplacement.data[0],
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2138 asmcode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2139
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2140 if ( operand->constDisplacement )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2141 insnTemplate << '+';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2142 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2143 // skip the addOperand(fmt, Arg_Integer...) below
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2144 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2145 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2146 addOperand ( fmt, Arg_Integer, newIntExp ( operand->constDisplacement ), asmcode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2147 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2148 case Opr_Reg:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2149 if ( opInfo->operands[i] & Opr_Dest )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2150 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2151 Reg clbr_reg = ( Reg ) regInfo[operand->reg].baseReg;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2152 if ( clbr_reg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2153 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2154 asmcode->regs[clbr_reg] = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2155 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2156 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2157 if ( opTakesLabel() /*opInfo->takesLabel()*/ )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2158 insnTemplate << '*';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2159 writeReg ( operand->reg );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2160 /*
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2161 insnTemplate << "%";
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2162 insnTemplate << regInfo[operand->reg].name;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2163 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2164 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2165 case Opr_Mem:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2166 // better: use output operands for simple variable references
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2167 if ( ( opInfo->operands[i] & Opr_Update ) == Opr_Update )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2168 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2169 mode = Mode_Update;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2170 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2171 else if ( opInfo->operands[i] & Opr_Dest )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2172 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2173 mode = Mode_Output;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2174 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2175 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2176 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2177 mode = Mode_Input;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2178 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2179
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2180 use_star = opTakesLabel();//opInfo->takesLabel();
1093
cb868105a6b5 Change x64 asm in Cache.d from a positive offset from after rbp "-20(%rbp)+4" to before
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1091
diff changeset
2181
1109
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2182 if (Logger::enabled()) {
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2183 Logger::cout() << "Opr_Mem\n";
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2184 LOG_SCOPE
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2185 Logger::cout() << "baseReg: " << operand->baseReg << '\n';
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2186 Logger::cout() << "segmentPrefix: " << operand->segmentPrefix << '\n';
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2187 Logger::cout() << "constDisplacement: " << operand->constDisplacement << '\n';
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2188 for (int i = 0; i < operand->symbolDisplacement.dim; i++) {
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2189 Expression* expr = (Expression*) operand->symbolDisplacement.data[i];
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2190 Logger::cout() << "symbolDisplacement[" << i << "] = " << expr->toChars() << '\n';
1096
25d3aaf9e058 Fix FS:4 miswrite due to earlier changes for a constant displacement
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1095
diff changeset
2191 }
1093
cb868105a6b5 Change x64 asm in Cache.d from a positive offset from after rbp "-20(%rbp)+4" to before
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1091
diff changeset
2192 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2193 if ( operand->segmentPrefix != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2194 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2195 writeReg ( operand->segmentPrefix );
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2196 insnTemplate << ':';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2197 }
1109
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2198 if ( (operand->segmentPrefix != Reg_Invalid && operand->symbolDisplacement.dim == 0)
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2199 || operand->constDisplacement )
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2200 {
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2201 insnTemplate << operand->constDisplacement;
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2202 if ( operand->symbolDisplacement.dim )
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2203 {
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2204 insnTemplate << '+';
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2205 }
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2206 operand->constDisplacement = 0;
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2207 //addOperand(fmt, Arg_Integer, newIntExp(operand->constDisplacement), asmcode);
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2208 if ( opInfo->operands[i] & Opr_Dest )
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2209 asmcode->clobbersMemory = 1;
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2210 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2211 if ( operand->symbolDisplacement.dim )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2212 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2213 Expression * e = ( Expression * ) operand->symbolDisplacement.data[0];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2214 Declaration * decl = 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2215
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2216 if ( e->op == TOKvar )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2217 decl = ( ( VarExp * ) e )->var;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2218
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2219 if ( operand->baseReg != Reg_Invalid &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2220 decl && ! decl->isDataseg() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2221 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2222
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2223 // 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
2224
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2225 /* GCC doesn't give the front end access to stack offsets
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2226 when optimization is turned on (3.x) or at all (4.x).
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2227
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2228 Try to convert var[EBP] (or var[ESP] for naked funcs) to
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2229 a memory expression that does not require us to know
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2230 the stack offset.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2231 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2232
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2233 if ( operand->indexReg == Reg_Invalid &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2234 decl->isVarDeclaration() &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2235 ( ( ( operand->baseReg == Reg_EBP || ( operand->baseReg == Reg_RBP ) ) && ! sc->func->naked ) ||
962
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
2236 ( ( operand->baseReg == Reg_ESP || ( operand->baseReg == Reg_RSP ) ) && ! sc->func->naked ) ) )
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2237 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2238
1053
11e28922ac76 Always pass an address expression (not a var expression) to asm operands of
Frits van Bommel <fvbommel wxs.nl>
parents: 1016
diff changeset
2239 e = new AddrExp ( 0, e );
11e28922ac76 Always pass an address expression (not a var expression) to asm operands of
Frits van Bommel <fvbommel wxs.nl>
parents: 1016
diff changeset
2240 e->type = decl->type->pointerTo();
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2241
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2242 #if !IN_LLVM
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2243 /* DMD uses the same frame offsets for naked functions. */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2244 if ( sc->func->naked )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2245 operand->constDisplacement += 4;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2246
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2247 if ( operand->constDisplacement )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2248 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2249 e = new AddExp ( 0, e,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2250 new IntegerExp ( 0, operand->constDisplacement,
962
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
2251 Type::tint64 ) );
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2252 e->type = decl->type->pointerTo();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2253 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2254 e = new PtrExp ( 0, e );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2255 e->type = decl->type;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2256 #endif
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2257 operand->constDisplacement = 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2258 operand->baseReg = Reg_Invalid;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2259
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2260 addOperand ( fmt, Arg_Memory, e, asmcode, mode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2261
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2262 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2263 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2264 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2265 // FIXME: what is this ?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2266 addOperand2 ( "${",":a}", Arg_FrameRelative, e, asmcode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2267 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2268 if ( opInfo->operands[i] & Opr_Dest )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2269 asmcode->clobbersMemory = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2270 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2271 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2272 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2273 // Plain memory reference to variable
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2274
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2275 /* If in a reg, DMD moves to memory.. even with -O, so we'll do the same
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2276 by always using the "m" contraint.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2277
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2278 In order to get the correct output for function and label symbols,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2279 the %an format must be used with the "p" constraint.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2280 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2281 if ( isDollar ( e ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2282 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2283 error ( "dollar labels are not supported", stmt->loc.toChars() );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2284 asmcode->dollarLabel = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2285 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2286 else if ( e->op == TOKdsymbol )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2287 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2288 LabelDsymbol * lbl = ( LabelDsymbol * ) ( ( DsymbolExp * ) e )->s;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2289 stmt->isBranchToLabel = lbl->ident;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2290
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2291 use_star = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2292 addLabel ( lbl->ident->toChars() );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2293 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2294 else if ( ( decl && decl->isCodeseg() ) ) // if function or label
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2295 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2296 use_star = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2297 // simply write out the mangle
1190
ea7b8b6c96c0 Some more fixups for mingw -- missing underscores
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1109
diff changeset
2298 // on osx and windows, prepend extra _
ea7b8b6c96c0 Some more fixups for mingw -- missing underscores
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1109
diff changeset
2299 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
2300 insnTemplate << "_";
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2301 insnTemplate << decl->mangle();
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2302 // addOperand2("${", ":c}", Arg_Pointer, e, asmcode);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2303 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2304 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2305 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2306 if ( use_star )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2307 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2308 insnTemplate << '*';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2309 use_star = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2310 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2311
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2312 if ( !sc->func->naked ) // no addrexp in naked asm please :)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2313 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2314 Type* tt = e->type->pointerTo();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2315 e = new AddrExp ( 0, e );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2316 e->type = tt;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2317 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2318
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2319 addOperand ( fmt, Arg_Memory, e, asmcode, mode );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2320 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2321 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2322 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2323 if ( use_star )
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2324 insnTemplate << '*';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2325 if ( operand->baseReg != Reg_Invalid || operand->indexReg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2326 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2327 insnTemplate << '(';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2328 if ( operand->baseReg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2329 writeReg ( operand->baseReg );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2330 if ( operand->indexReg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2331 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2332 insnTemplate << ',';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2333 writeReg ( operand->indexReg );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2334 if ( operand->scale )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2335 {
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2336 insnTemplate << "," << operand->scale;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2337 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2338 }
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2339 insnTemplate << ')';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2340 if ( opInfo->operands[i] & Opr_Dest )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2341 asmcode->clobbersMemory = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2342 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2343 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2344 case Opr_Invalid:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2345 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2346 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2347 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2348
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
2349 asmcode->insnTemplate = insnTemplate.str();
1109
97d80437cb80 Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents: 1108
diff changeset
2350 Logger::cout() << "insnTemplate = " << asmcode->insnTemplate << '\n';
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2351 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2352 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2353
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2354 bool isIntExp ( Expression * exp )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2355 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2356 if ( exp->op == TOKint64 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2357 return 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2358 if ( exp->op == TOKvar )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2359 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2360 Declaration * v = ( ( VarExp * ) exp )->var;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2361 if ( v->isConst() && v->type->isintegral() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2362 return 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2363 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2364 return 0;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2365 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2366 bool isRegExp ( Expression * exp ) { return exp->op == TOKmod; } // ewww.%%
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2367 bool isLocalSize ( Expression * exp )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2368 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2369 // cleanup: make a static var
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2370 return exp->op == TOKidentifier && ( ( IdentifierExp * ) exp )->ident == Id::__LOCAL_SIZE;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2371 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2372 bool isDollar ( Expression * exp )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2373 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2374 return exp->op == TOKidentifier && ( ( IdentifierExp * ) exp )->ident == Id::__dollar;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2375 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2376
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2377 Expression * newRegExp ( int regno )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2378 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2379 IntegerExp * e = new IntegerExp ( regno );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2380 e->op = TOKmod;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2381 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2382 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2383
962
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
2384 Expression * newIntExp ( long v /* %% type */ )
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2385 {
962
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
2386 // Handle 64 bit ... incoming long may need to be 'long long' for Windows???
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
2387 return new IntegerExp ( stmt->loc, v, Type::tint64 );
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2388 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2389
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2390 void slotExp ( Expression * exp )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2391 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2392 /*
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2393 if offset, make a note
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2394
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2395 if integer, add to immediate
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2396 if reg:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2397 if not in bracket, set reg (else error)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2398 if in bracket:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2399 if not base, set base
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2400 if not index, set index
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2401 else, error
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2402 if symbol:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2403 set symbol field
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2404 */
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2405
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2406 bool is_offset = false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2407 if ( exp->op == TOKaddress )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2408 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2409 exp = ( ( AddrExp * ) exp )->e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2410 is_offset = true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2411 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2412
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2413 if ( isIntExp ( exp ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2414 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2415 if ( is_offset )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2416 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2417 operand->constDisplacement += exp->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2418 if ( ! operand->inBracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2419 operand->hasNumber = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2420 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2421 else if ( isRegExp ( exp ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2422 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2423 if ( is_offset )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2424 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2425 if ( ! operand->inBracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2426 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2427 if ( operand->reg == Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2428 operand->reg = ( Reg ) exp->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2429 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2430 stmt->error ( "too many registers in operand (use brackets)" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2431 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2432 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2433 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2434 if ( operand->baseReg == Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2435 operand->baseReg = ( Reg ) exp->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2436 else if ( operand->indexReg == Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2437 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2438 operand->indexReg = ( Reg ) exp->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2439 operand->scale = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2440 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2441 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2442 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2443 stmt->error ( "too many registers memory operand" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2444 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2445 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2446 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2447 else if ( exp->op == TOKvar )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2448 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2449 VarDeclaration * v = ( ( VarExp * ) exp )->var->isVarDeclaration();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2450
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2451 if ( v && v->storage_class & STCfield )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2452 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2453 operand->constDisplacement += v->offset;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2454 if ( ! operand->inBracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2455 operand->hasNumber = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2456 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2457 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2458 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2459 if ( v && v->type->isscalar() )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2460 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2461 // DMD doesn't check Tcomplex*, and counts Tcomplex32 as Tfloat64
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2462 TY ty = v->type->toBasetype()->ty;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2463 operand->dataSizeHint = ty == Tfloat80 || ty == Timaginary80 ?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2464 Extended_Ptr : ( PtrType ) v->type->size ( 0 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2465 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2466
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2467 if ( ! operand->symbolDisplacement.dim )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2468 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2469 if ( is_offset && ! operand->inBracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2470 operand->isOffset = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2471 operand->symbolDisplacement.push ( exp );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2472 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2473 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2474 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2475 stmt->error ( "too many symbols in operand" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2476 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2477 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2478 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2479 else if ( exp->op == TOKidentifier || exp->op == TOKdsymbol )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2480 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2481 // %% localsize could be treated as a simple constant..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2482 // change to addSymbolDisp(e)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2483 if ( ! operand->symbolDisplacement.dim )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2484 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2485 operand->symbolDisplacement.push ( exp );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2486 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2487 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2488 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2489 stmt->error ( "too many symbols in operand" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2490 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2491 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2492 else if ( exp == Handled )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2493 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2494 // nothing
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2495 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2496 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2497 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2498 stmt->error ( "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
2499 }
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
2500 }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2501
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2502 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
2503 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2504 // %% report operand number
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2505 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
2506 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2507
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2508 Expression * intOp ( TOK op, Expression * e1, Expression * e2 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2509 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2510 Expression * e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2511 if ( isIntExp ( e1 ) && ( ! e2 || isIntExp ( e2 ) ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2512 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2513 switch ( op )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2514 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2515 case TOKadd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2516 if ( e2 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2517 e = new AddExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2518 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2519 e = e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2520 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2521 case TOKmin:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2522 if ( e2 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2523 e = new MinExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2524 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2525 e = new NegExp ( stmt->loc, e1 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2526 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2527 case TOKmul:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2528 e = new MulExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2529 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2530 case TOKdiv:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2531 e = new DivExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2532 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2533 case TOKmod:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2534 e = new ModExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2535 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2536 case TOKshl:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2537 e = new ShlExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2538 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2539 case TOKshr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2540 e = new ShrExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2541 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2542 case TOKushr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2543 e = new UshrExp ( stmt->loc, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2544 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2545 case TOKnot:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2546 e = new NotExp ( stmt->loc, e1 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2547 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2548 case TOKtilde:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2549 e = new ComExp ( stmt->loc, e1 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2550 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2551 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2552 assert ( 0 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2553 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2554 e = e->semantic ( sc );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2555 return e->optimize ( WANTvalue | WANTinterpret );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2556 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2557 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2558 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2559 stmt->error ( "expected integer operand(s) for '%s'", Token::tochars[op] );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2560 return newIntExp ( 0 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2561 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2562 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2563
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2564 void parseOperand()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2565 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2566 Expression * exp = parseAsmExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2567 slotExp ( exp );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2568 if ( isRegExp ( exp ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2569 operand->dataSize = ( PtrType ) regInfo[exp->toInteger() ].size;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2570 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2571
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2572 Expression * parseAsmExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2573 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2574 return parseShiftExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2575 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2576
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2577 Expression * parseShiftExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2578 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2579 Expression * e1 = parseAddExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2580 Expression * e2;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2581
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2582 while ( 1 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2583 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2584 TOK tv = token->value;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2585 switch ( tv )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2586 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2587 case TOKshl:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2588 case TOKshr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2589 case TOKushr:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2590 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2591 e2 = parseAddExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2592 e1 = intOp ( tv, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2593 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2594 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2595 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2596 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2597 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2598 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2599 return e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2600 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2601
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2602 Expression * parseAddExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2603 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2604 Expression * e1 = parseMultExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2605 Expression * e2;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2606
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2607 while ( 1 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2608 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2609 TOK tv = token->value;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2610 switch ( tv )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2611 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2612 case TOKadd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2613 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2614 e2 = parseMultExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2615 if ( isIntExp ( e1 ) && isIntExp ( e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2616 e1 = intOp ( tv, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2617 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2618 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2619 slotExp ( e1 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2620 slotExp ( e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2621 e1 = Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2622 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2623 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2624 case TOKmin:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2625 // Note: no support for symbol address difference
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2626 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2627 e2 = parseMultExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2628 if ( isIntExp ( e1 ) && isIntExp ( e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2629 e1 = intOp ( tv, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2630 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2631 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2632 slotExp ( e1 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2633 e2 = intOp ( TOKmin, e2, NULL ); // verifies e2 is an int
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2634 slotExp ( e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2635 e1 = Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2636 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2637 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2638 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2639 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2640 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2641 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2642 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2643 return e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
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: 935
diff changeset
2646 bool tryScale ( Expression * e1, Expression * e2 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2647 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2648 Expression * et;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2649 if ( isIntExp ( e1 ) && isRegExp ( e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2650 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2651 et = e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2652 e1 = e2;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2653 e2 = et;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2654 goto do_scale;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2655 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2656 else if ( isRegExp ( e1 ) && isIntExp ( e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2657 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2658 do_scale:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2659 if ( ! operand->inBracket )
221
68687d8c3e9a [svn r237] some inline asm output now seems to work, see tangotests/asm2.d
lindquist
parents: 220
diff changeset
2660 {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2661 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
2662 }
222
251548c1035d [svn r238] use *m for memory input constraints and pass in their address
ChristianK
parents: 221
diff changeset
2663
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2664 if ( operand->scale || operand->indexReg != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2665 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2666 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2667 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2668 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2669
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2670 operand->indexReg = ( Reg ) e1->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2671 operand->scale = e2->toInteger();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2672 switch ( operand->scale )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2673 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2674 case 1:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2675 case 2:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2676 case 4:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2677 case 8:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2678 // ok; do nothing
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2679 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2680 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2681 stmt->error ( "invalid index register scale '%d'", operand->scale );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2682 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2683 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2684
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2685 return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2686 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2687 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2688 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2689
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2690 Expression * parseMultExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2691 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2692 Expression * e1 = parseBrExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2693 Expression * e2;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2694
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2695 while ( 1 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2696 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2697 TOK tv = token->value;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2698 switch ( tv )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2699 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2700 case TOKmul:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2701 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2702 e2 = parseMultExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2703 if ( isIntExp ( e1 ) && isIntExp ( e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2704 e1 = intOp ( tv, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2705 else if ( tryScale ( e1,e2 ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2706 e1 = Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2707 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2708 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2709 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2710 case TOKdiv:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2711 case TOKmod:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2712 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2713 e2 = parseMultExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2714 e1 = intOp ( tv, e1, e2 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2715 continue;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2716 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2717 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2718 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2719 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2720 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2721 return e1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2722 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2723
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2724 Expression * parseBrExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2725 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2726 // %% check (why is bracket lower precends..)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2727 // 3+4[eax] -> 3 + (4 [EAX]) ..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2728
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2729 // only one bracked allowed, so this doesn't quite handle
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2730 // the spec'd syntax
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2731 Expression * e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2732
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2733 if ( token->value == TOKlbracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2734 e = Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2735 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2736 e = parseUnaExp();
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: 935
diff changeset
2738 // DMD allows multiple bracket expressions.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2739 while ( token->value == TOKlbracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2740 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2741 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2742
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2743 operand->inBracket = operand->hasBracket = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2744 slotExp ( parseAsmExp() );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2745 operand->inBracket = 0;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2746
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2747 if ( token->value == TOKrbracket )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2748 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2749 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2750 stmt->error ( "missing ']'" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2751 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2752
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2753 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2754 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2755
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2756 PtrType isPtrType ( Token * tok )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2757 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2758 switch ( tok->value )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2759 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2760 case TOKint8: return Byte_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2761 case TOKint16: return Short_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2762 case TOKint32: return Int_Ptr;
962
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
2763 case TOKint64: return QWord_Ptr;
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
2764 // 'long ptr' isn't accepted? (it is now for x64 - qword)
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2765 case TOKfloat32: return Float_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2766 case TOKfloat64: return Double_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2767 case TOKfloat80: return Extended_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2768 case TOKidentifier:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2769 for ( int i = 0; i < N_PtrNames; i++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2770 if ( tok->ident == ptrTypeIdentTable[i] )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2771 return ptrTypeValueTable[i];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2772 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2773 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2774 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2775 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2776 return Default_Ptr;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2777 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2778
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2779 Expression * parseUnaExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2780 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2781 Expression * e = NULL;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2782 PtrType ptr_type;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2783
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2784 // First, check for type prefix.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2785 if ( token->value != TOKeof &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2786 peekToken()->value == TOKidentifier &&
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2787 peekToken()->ident == Id::ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2788 {
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2789
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2790 ptr_type = isPtrType ( token );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2791 if ( ptr_type != Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2792 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2793 if ( operand->dataSize == Default_Ptr )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2794 operand->dataSize = ptr_type;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2795 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2796 stmt->error ( "multiple specifications of operand size" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2797 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2798 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2799 stmt->error ( "unknown operand size '%s'", token->toChars() );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2800 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2801 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2802 return parseAsmExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2803 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2804
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2805 TOK tv = token->value;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2806 switch ( tv )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2807 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2808 case TOKidentifier:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2809 if ( token->ident == ident_seg )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2810 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2811 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2812 stmt->error ( "'seg' not supported" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2813 e = parseAsmExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2814 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2815 else if ( token->ident == Id::offset ||
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2816 token->ident == Id::offsetof )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2817 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2818 if ( token->ident == Id::offset && ! global.params.useDeprecated )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2819 stmt->error ( "offset deprecated, use offsetof" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2820 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2821 e = parseAsmExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2822 e = new AddrExp ( stmt->loc, e );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2823 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2824 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2825 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2826 // primary exp
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2827 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2828 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2829 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2830 case TOKadd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2831 case TOKmin:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2832 case TOKnot:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2833 case TOKtilde:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2834 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2835 e = parseUnaExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2836 return intOp ( tv, e, NULL );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2837 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2838 // primary exp
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2839 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2840 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2841 return parsePrimaryExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2842 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2843
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2844 Expression * parsePrimaryExp()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2845 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2846 Expression * e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2847 Identifier * ident = NULL;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2848
1304
b995c146366e Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents: 1303
diff changeset
2849 // get rid of short/long prefixes for branches
b995c146366e Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents: 1303
diff changeset
2850 if (opTakesLabel() && (token->value == TOKint16 || token->value == TOKint64))
b995c146366e Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents: 1303
diff changeset
2851 nextToken();
b995c146366e Ignore short/long prefix of labels instead of ignoring the whole branch
Christian Kamm <kamm incasoftware de>
parents: 1303
diff changeset
2852
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2853 switch ( token->value )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2854 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2855 case TOKint32v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2856 case TOKuns32v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2857 case TOKint64v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2858 case TOKuns64v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2859 // semantic here?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2860 // %% for tok64 really should use 64bit type
962
a415d305477f Fix 32 bit truncation of 'asm { movq RAX, 0xAA_1234_5678; }'...ie. move constant larger than 32 bits
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 961
diff changeset
2861 e = new IntegerExp ( stmt->loc, token->uns64value, Type::tint64 );
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2862 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2863 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2864 case TOKfloat32v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2865 case TOKfloat64v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2866 case TOKfloat80v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2867 // %% need different types?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2868 e = new RealExp ( stmt->loc, token->float80value, Type::tfloat80 );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2869 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2870 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2871 case TOKidentifier:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2872 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2873 ident = token->ident;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2874 nextToken();
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2875
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2876 if ( ident == Id::__LOCAL_SIZE )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2877 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2878 return new IdentifierExp ( stmt->loc, ident );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2879 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2880 else if ( ident == Id::__dollar )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2881 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2882 do_dollar:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2883 return new IdentifierExp ( stmt->loc, ident );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2884 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2885 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2886 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2887 e = new IdentifierExp ( stmt->loc, ident );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2888 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2889
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2890 // If this is more than one component ref, it gets complicated: *(&Field + n)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2891 // maybe just do one step at a time..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2892 // simple case is Type.f -> VarDecl(field)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2893 // actually, DMD only supports on level...
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2894 // X.y+Y.z[EBX] is supported, tho..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2895 // %% doesn't handle properties (check%%)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2896 while ( token->value == TOKdot )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2897 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2898 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2899 if ( token->value == TOKidentifier )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2900 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2901 e = new DotIdExp ( stmt->loc, e, token->ident );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2902 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2903 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2904 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2905 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2906 stmt->error ( "expected identifier" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2907 return Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2908 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2909 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2910
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2911 // check for reg first then dotexp is an error?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2912 if ( e->op == TOKidentifier )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2913 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2914 for ( int i = 0; i < N_Regs; i++ )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2915 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2916 if ( ident == regInfo[i].ident )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2917 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2918 if ( ( Reg ) i == Reg_ST && token->value == TOKlparen )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2919 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2920 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2921 switch ( token->value )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2922 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2923 case TOKint32v: case TOKuns32v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2924 case TOKint64v: case TOKuns64v:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2925 if ( token->uns64value < 8 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2926 e = newRegExp ( ( Reg ) ( Reg_ST + token->uns64value ) );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2927 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2928 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2929 stmt->error ( "invalid floating point register index" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2930 e = Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2931 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2932 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2933 if ( token->value == TOKrparen )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2934 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2935 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2936 stmt->error ( "expected ')'" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2937 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2938 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2939 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2940 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2941 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2942 return Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2943 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2944 else if ( token->value == TOKcolon )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2945 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2946 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2947 if ( operand->segmentPrefix != Reg_Invalid )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2948 stmt->error ( "too many segment prefixes" );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2949 else if ( i >= Reg_CS && i <= Reg_GS )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2950 operand->segmentPrefix = ( Reg ) i;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2951 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2952 stmt->error ( "'%s' is not a segment register", ident->string );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2953 return parseAsmExp();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2954 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2955 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2956 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2957 return newRegExp ( ( Reg ) i );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2958 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2959 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2960 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2961 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2962
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2963 if ( opTakesLabel() /*opInfo->takesLabel()*/ && e->op == TOKidentifier )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2964 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2965 // DMD uses labels secondarily to other symbols, so check
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2966 // if IdentifierExp::semantic won't find anything.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2967 Dsymbol *scopesym;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2968
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2969 if ( ! sc->search ( stmt->loc, ident, & scopesym ) )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2970 return new DsymbolExp ( stmt->loc,
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2971 sc->func->searchLabel ( ident ) );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2972 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2973
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2974 e = e->semantic ( sc );
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
2975
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2976 // Special case for floating point constant declarations.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2977 if ( e->op == TOKfloat64 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2978 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2979 Dsymbol * sym = sc->search ( stmt->loc, ident, NULL );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2980 if ( sym )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2981 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2982 VarDeclaration *v = sym->isVarDeclaration();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2983 if ( v )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2984 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2985 Expression *ve = new VarExp ( stmt->loc, v );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2986 ve->type = e->type;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2987 e = ve;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2988 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2989 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2990 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2991 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2992 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2993 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2994 case TOKdollar:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2995 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2996 ident = Id::__dollar;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2997 goto do_dollar;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2998 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
2999 default:
1091
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
3000 if ( op == Op_FMath0 || op == Op_FdST0ST1 || op == Op_FMath )
20d96c148b39 Fix for fmul/div/add/sub with no operands. Revert explicit ST0 definition since a typo
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents: 1085
diff changeset
3001 return Handled;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3002 invalidExpression();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3003 return Handled;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3004 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3005 return e;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3006 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3007
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3008 void doAlign()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3009 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3010 // .align bits vs. bytes...
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3011 // 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
3012
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3013 // parse primary: DMD allows 'MyAlign' (const int) but not '2+2'
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3014 // GAS is padding with NOPs last time I checked.
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3015 Expression * e = parseAsmExp()->optimize ( WANTvalue | WANTinterpret );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3016 uinteger_t align = e->toUInteger();
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3017
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3018 if ( ( align & ( align - 1 ) ) == 0 )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3019 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3020 //FIXME: This printf is not portable. The use of `align` varies from system to system;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3021 // on i386 using a.out, .align `n` will align on a 2^`n` boundary instead of an `n` boundary
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3022 #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
3023 insnTemplate << ".balign\t" << align;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3024 #else
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
3025 insnTemplate << ".align\t" << align;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3026 #endif
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3027 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3028 else
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3029 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3030 stmt->error ( "alignment must be a power of 2, not %u", ( unsigned ) align );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3031 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3032
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3033 setAsmCode();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3034 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3035
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3036 void doEven()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3037 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3038 // .align for GAS is in bits, others probably use bytes..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3039 #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
3040 insnTemplate << ".align\t2";
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3041 #else
1102
ae950bd712d3 Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents: 1101
diff changeset
3042 insnTemplate << ".align\t2";
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3043 #endif
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3044 setAsmCode();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3045 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3046
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3047 void doNaked()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3048 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3049 // %% can we assume sc->func != 0?
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3050 sc->func->naked = 1;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3051 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3052
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3053 void doData()
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3054 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3055 static const char * directives[] = { ".byte", ".short", ".long", ".long",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3056 "", "", ""
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3057 };
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3058 // FIXME
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3059 /*
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3060 machine_mode mode;
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3061
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3062 insnTemplate->writestring((char*) directives[op - Op_db]);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3063 insnTemplate->writebyte(' ');
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3064
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3065 do {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3066 // DMD is pretty strict here, not even constant expressions are allowed..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3067 switch (op) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3068 case Op_db:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3069 case Op_ds:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3070 case Op_di:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3071 case Op_dl:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3072 if (token->value == TOKint32v || token->value == TOKuns32v ||
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3073 token->value == TOKint64v || token->value == TOKuns64v) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3074 // As per usual with GNU, assume at least 32-bit host
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3075 if (op != Op_dl)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3076 insnTemplate->printf("%u", (d_uns32) token->uns64value);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3077 else {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3078 // Output two .longS. GAS has .quad, but would have to rely on 'L' format ..
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3079 // just need to use HOST_WIDE_INT_PRINT_DEC
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3080 insnTemplate->printf("%u,%u",
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3081 (d_uns32) token->uns64value, (d_uns32) (token->uns64value >> 32));
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3082 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3083 } else {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3084 stmt->error("expected integer constant");
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3085 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3086 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3087 case Op_df:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3088 mode = SFmode;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3089 goto do_float;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3090 case Op_dd:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3091 mode = DFmode;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3092 goto do_float;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3093 case Op_de:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3094 #ifndef TARGET_80387
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3095 #define XFmode TFmode
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3096 #endif
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3097 mode = XFmode; // not TFmode
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3098 // drop through
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3099 do_float:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3100 if (token->value == TOKfloat32v || token->value == TOKfloat64v ||
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3101 token->value == TOKfloat80v) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3102 long words[3];
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3103 real_to_target(words, & token->float80value.rv(), mode);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3104 // don't use directives..., just use .long like GCC
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3105 insnTemplate->printf(".long\t%u", words[0]);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3106 if (mode != SFmode)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3107 insnTemplate->printf(",%u", words[1]);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3108 // DMD outputs 10 bytes, so we need to switch to .short here
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3109 if (mode == XFmode)
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3110 insnTemplate->printf("\n\t.short\t%u", words[2]);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3111 } else {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3112 stmt->error("expected float constant");
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3113 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3114 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3115 default:
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3116 abort();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3117 }
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3118
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3119 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3120 if (token->value == TOKcomma) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3121 insnTemplate->writebyte(',');
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3122 nextToken();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3123 } else if (token->value == TOKeof) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3124 break;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3125 } else {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3126 stmt->error("expected comma");
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3127 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3128 } while (1);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3129
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3130 setAsmCode();*/
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3131 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3132 };
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3133
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3134 #if D_GCC_VER < 40
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3135 // 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
3136 // be modified accordingly.
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3137 #undef XEXP
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3138 #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
3139 #endif
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3140
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3141 // FIXME
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3142 #define HOST_WIDE_INT long
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3143 bool getFrameRelativeValue ( LLValue* decl, HOST_WIDE_INT * result )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3144 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3145 assert ( 0 );
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3146 // FIXME
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3147 // // 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
3148 // // 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
3149 // // 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
3150 // rtx r = DECL_INCOMING_RTL(decl);
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3151 // rtx e1, e2;
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3152 //
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3153 // // Local variables don't have DECL_INCOMING_RTL
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3154 // if (r == NULL_RTX)
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3155 // r = DECL_RTL(decl);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3156 //
219
761c8352f494 [svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff changeset
3157 // if (r != NULL_RTX && GET_CODE(r) == MEM /* && r->frame_related */ ) {
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3158 // r = XEXP(r, 0);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3159 // if (GET_CODE(r) == PLUS) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3160 // e1 = XEXP(r, 0);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3161 // e2 = XEXP(r, 1);
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3162 // if (e1 == virtual_incoming_args_rtx && GET_CODE(e2) == CONST_INT) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3163 // *result = INTVAL(e2) + 8; // %% 8 is 32-bit specific...
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3164 // return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3165 // } else if (e1 == virtual_stack_vars_rtx && GET_CODE(e2) == CONST_INT) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3166 // *result = INTVAL(e2); // %% 8 is 32-bit specific...
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3167 // return true;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3168 // }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3169 // } else if (r == virtual_incoming_args_rtx) {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3170 // *result = 8;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3171 // return true; // %% same as above
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3172 // }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3173 // // 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
3174 // }
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3175 //
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3176 return false;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3177 }
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
3178
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
3179
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3180 struct AsmParser : public AsmParserCommon
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3181 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3182 virtual void run ( Scope* sc, AsmStatement* asmst )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3183 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3184 AsmProcessor ap ( sc, asmst );
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3185 ap.run();
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3186 }
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
3187
944
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3188 virtual std::string getRegName ( int i )
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3189 {
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3190 return regInfo[i].gccName;
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3191 }
eb310635d80e Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 935
diff changeset
3192 };
756
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
3193
a58784e0f035 Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents: 751
diff changeset
3194 }