Mercurial > projects > ldc
annotate gen/asm-x86-32.h @ 1117:4c20fcc4252b
Fun with parameter attributes: For several of the "synthetic" parameters added
to D functions, we can apply noalias and nocapture. They are sret parameters,
'nest' pointers passed to nested functions, and _argptr:
Nocapture:
- Sret and nest are nocapture because they don't represent D-level variables,
and thus the callee can't (validly) obtain a pointer to them, let alone keep
it around after it returns.
- _argptr is nocapture because although the callee has access to it as a
pointer, that pointer is invalidated when it returns.
All three are noalias because they're function-local variables
- Sret and _argptr are noalias because they're freshly alloca'd memory only
used for a single function call that's not allowed to keep an aliasing
pointer to it around (since the parameter is nocapture).
- 'Nest' is noalias because the callee only ever has access to one such pointer
per parent function, and every parent function has a different one.
This commit also ensures attributes set on sret, _arguments and _argptr are
propagated to calls to such functions.
It also adds one exception to the general rule that attributes on function types
should propagate to calls: the type of a delegate's function pointer has a
'nest' parameter, but this can either be a true 'nest' (for delegates to nested
functions) or a 'this' (for delegates to member functions). Since 'this' is
neither noalias nor nocapture, and there's generally no way to tell which one it
is, we remove these attributes at the call site if the callee is a delegate.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Sat, 14 Mar 2009 22:15:31 +0100 |
parents | 97d80437cb80 |
children | ea7b8b6c96c0 |
rev | line source |
---|---|
304 | 1 // Taken from GDC source tree. Original by David Friedman. |
2 // Released under the Artistic License found in dmd/artistic.txt | |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3 |
751
dc8b8b7ea0c1
Fix compile-time warnings. Adjust include in d-asm-i386.
Christian Kamm <kamm incasoftware de>
parents:
468
diff
changeset
|
4 #include "id.h" |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
5 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
6 namespace AsmParserx8632 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
7 { |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
8 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
9 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
10 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
11 Reg_Invalid = -1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
12 Reg_EAX = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
13 Reg_EBX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
14 Reg_ECX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
15 Reg_EDX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
16 Reg_ESI, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
17 Reg_EDI, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
18 Reg_EBP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
19 Reg_ESP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
20 Reg_ST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
21 Reg_ST1, Reg_ST2, Reg_ST3, Reg_ST4, Reg_ST5, Reg_ST6, Reg_ST7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
22 Reg_MM0, Reg_MM1, Reg_MM2, Reg_MM3, Reg_MM4, Reg_MM5, Reg_MM6, Reg_MM7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
23 Reg_XMM0, Reg_XMM1, Reg_XMM2, Reg_XMM3, Reg_XMM4, Reg_XMM5, Reg_XMM6, Reg_XMM7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
24 // xmm8-15? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
25 Reg_EFLAGS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
26 Reg_CS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
27 Reg_DS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
28 Reg_SS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
29 Reg_ES, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
30 Reg_FS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
31 Reg_GS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
32 Reg_AX, Reg_BX, Reg_CX, Reg_DX, Reg_SI, Reg_DI, Reg_BP, Reg_SP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
33 Reg_AL, Reg_AH, Reg_BL, Reg_BH, Reg_CL, Reg_CH, Reg_DL, Reg_DH, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
34 Reg_CR0, Reg_CR2, Reg_CR3, Reg_CR4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
35 Reg_DR0, Reg_DR1, Reg_DR2, Reg_DR3, Reg_DR6, Reg_DR7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
36 Reg_TR3, Reg_TR4, Reg_TR5, Reg_TR6, Reg_TR7 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
37 } Reg; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
38 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
39 static const int N_Regs = /*gp*/ 8 + /*fp*/ 8 + /*mmx*/ 8 + /*sse*/ 8 + |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
40 /*seg*/ 6 + /*16bit*/ 8 + /*8bit*/ 8 + /*sys*/ 4+6+5 + /*flags*/ + 1; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
41 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
42 #define NULL_TREE "" |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
43 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
44 static struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
45 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
46 const char * name; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
47 std::string gccName; // GAS will take upper case, but GCC won't (needed for the clobber list) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
48 Identifier * ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
49 char size; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
50 char baseReg; // %% todo: Reg, Reg_XX |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
51 } regInfo[N_Regs] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
52 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
53 { "EAX", NULL_TREE, NULL, 4, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
54 { "EBX", NULL_TREE, NULL, 4, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
55 { "ECX", NULL_TREE, NULL, 4, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
56 { "EDX", NULL_TREE, NULL, 4, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
57 { "ESI", NULL_TREE, NULL, 4, Reg_ESI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
58 { "EDI", NULL_TREE, NULL, 4, Reg_EDI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
59 { "EBP", NULL_TREE, NULL, 4, Reg_EBP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
60 { "ESP", NULL_TREE, NULL, 4, Reg_ESP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
61 { "ST", NULL_TREE, NULL, 10, Reg_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
62 { "ST(1)", NULL_TREE, NULL,10, Reg_ST1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
63 { "ST(2)", NULL_TREE, NULL,10, Reg_ST2 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
64 { "ST(3)", NULL_TREE, NULL,10, Reg_ST3 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
65 { "ST(4)", NULL_TREE, NULL,10, Reg_ST4 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
66 { "ST(5)", NULL_TREE, NULL,10, Reg_ST5 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
67 { "ST(6)", NULL_TREE, NULL,10, Reg_ST6 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
68 { "ST(7)", NULL_TREE, NULL,10, Reg_ST7 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
69 { "MM0", NULL_TREE, NULL, 8, Reg_MM0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
70 { "MM1", NULL_TREE, NULL, 8, Reg_MM1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
71 { "MM2", NULL_TREE, NULL, 8, Reg_MM2 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
72 { "MM3", NULL_TREE, NULL, 8, Reg_MM3 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
73 { "MM4", NULL_TREE, NULL, 8, Reg_MM4 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
74 { "MM5", NULL_TREE, NULL, 8, Reg_MM5 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
75 { "MM6", NULL_TREE, NULL, 8, Reg_MM6 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
76 { "MM7", NULL_TREE, NULL, 8, Reg_MM7 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
77 { "XMM0", NULL_TREE, NULL, 16, Reg_XMM0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
78 { "XMM1", NULL_TREE, NULL, 16, Reg_XMM1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
79 { "XMM2", NULL_TREE, NULL, 16, Reg_XMM2 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
80 { "XMM3", NULL_TREE, NULL, 16, Reg_XMM3 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
81 { "XMM4", NULL_TREE, NULL, 16, Reg_XMM4 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
82 { "XMM5", NULL_TREE, NULL, 16, Reg_XMM5 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
83 { "XMM6", NULL_TREE, NULL, 16, Reg_XMM6 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
84 { "XMM7", NULL_TREE, NULL, 16, Reg_XMM7 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
85 { "FLAGS", NULL_TREE, NULL, 0, Reg_EFLAGS }, // the gcc name is "flags"; not used in assembler input |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
86 { "CS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
87 { "DS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
88 { "SS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
89 { "ES", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
90 { "FS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
91 { "GS", NULL_TREE, NULL, 2, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
92 { "AX", NULL_TREE, NULL, 2, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
93 { "BX", NULL_TREE, NULL, 2, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
94 { "CX", NULL_TREE, NULL, 2, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
95 { "DX", NULL_TREE, NULL, 2, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
96 { "SI", NULL_TREE, NULL, 2, Reg_ESI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
97 { "DI", NULL_TREE, NULL, 2, Reg_EDI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
98 { "BP", NULL_TREE, NULL, 2, Reg_EBP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
99 { "SP", NULL_TREE, NULL, 2, Reg_ESP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
100 { "AL", NULL_TREE, NULL, 1, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
101 { "AH", NULL_TREE, NULL, 1, Reg_EAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
102 { "BL", NULL_TREE, NULL, 1, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
103 { "BH", NULL_TREE, NULL, 1, Reg_EBX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
104 { "CL", NULL_TREE, NULL, 1, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
105 { "CH", NULL_TREE, NULL, 1, Reg_ECX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
106 { "DL", NULL_TREE, NULL, 1, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
107 { "DH", NULL_TREE, NULL, 1, Reg_EDX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
108 { "CR0", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
109 { "CR2", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
110 { "CR3", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
111 { "CR4", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
112 { "DR0", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
113 { "DR1", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
114 { "DR2", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
115 { "DR3", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
116 { "DR6", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
117 { "DR7", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
118 { "TR3", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
119 { "TR4", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
120 { "TR5", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
121 { "TR6", NULL_TREE, NULL, 0, -1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
122 { "TR7", NULL_TREE, NULL, 0, -1 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
123 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
124 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
125 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
126 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
127 No_Type_Needed, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
128 Int_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
129 Word_Types, // same as Int_Types, but byte is not allowed |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
130 FP_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
131 FPInt_Types, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
132 Byte_NoType, // byte only, but no type suffix |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
133 } TypeNeeded; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
134 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
135 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
136 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
137 No_Link, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
138 Out_Mnemonic, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
139 Next_Form |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
140 } OpLink; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
141 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
142 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
143 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
144 Clb_SizeAX = 0x01, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
145 Clb_SizeDXAX = 0x02, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
146 Clb_EAX = 0x03, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
147 Clb_DXAX_Mask = 0x03, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
148 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
149 Clb_Flags = 0x04, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
150 Clb_DI = 0x08, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
151 Clb_SI = 0x10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
152 Clb_CX = 0x20, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
153 Clb_ST = 0x40, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
154 Clb_SP = 0x80 // Doesn't actually let GCC know the frame pointer is modified |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
155 } ImplicitClober; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
156 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
157 // "^ +/..\([A-Za-z_0-9]+\).*" -> " \1," |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
158 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
159 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
160 Op_Invalid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
161 Op_Adjust, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
162 Op_Dst, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
163 Op_Upd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
164 Op_DstW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
165 Op_DstF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
166 Op_UpdF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
167 Op_DstSrc, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
168 Op_DstSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
169 Op_UpdSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
170 Op_DstSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
171 Op_UpdSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
172 Op_DstSrcSSE, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
173 Op_DstSrcMMX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
174 Op_DstSrcImmS, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
175 Op_DstSrcImmM, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
176 Op_UpdSrcShft, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
177 Op_DstSrcNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
178 Op_UpdSrcNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
179 Op_DstMemNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
180 Op_DstRMBNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
181 Op_DstRMWNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
182 Op_UpdUpd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
183 Op_UpdUpdF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
184 Op_Src, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
185 Op_SrcRMWNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
186 Op_SrcW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
187 Op_SrcImm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
188 Op_Src_DXAXF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
189 Op_SrcMemNT, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
190 Op_SrcMemNTF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
191 Op_SrcSrc, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
192 Op_SrcSrcF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
193 Op_SrcSrcFW, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
194 Op_SrcSrcSSEF, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
195 Op_SrcSrcMMX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
196 Op_Shift, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
197 Op_Branch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
198 Op_CBranch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
199 Op_0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
200 Op_0_AX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
201 Op_0_DXAX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
202 Op_Loop, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
203 Op_Flags, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
204 Op_F0_ST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
205 Op_F0_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
206 Op_Fs_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
207 Op_Fis, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
208 Op_Fis_ST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
209 Op_Fis_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
210 Op_Fid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
211 Op_Fid_P, |
1087
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
212 Op_FidR_P, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
213 Op_Ffd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
214 Op_FfdR, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
215 Op_Ffd_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
216 Op_FfdR_P, |
1056
cc723604da95
Fixed two operand form of X86 fstp instruction. (throw away second operand!)
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
944
diff
changeset
|
217 Op_FfdRR_P, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
218 Op_Fd_P, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
219 Op_FdST, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
220 Op_FMath, |
1092
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
221 Op_FMath0, |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
222 Op_FMath2, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
223 Op_FdSTiSTi, |
1092
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
224 Op_FdST0ST1, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
225 Op_FPMath, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
226 Op_FCmp, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
227 Op_FCmp1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
228 Op_FCmpP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
229 Op_FCmpP1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
230 Op_FCmpFlg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
231 Op_FCmpFlgP, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
232 Op_fld, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
233 Op_fldR, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
234 Op_fxch, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
235 Op_fxch1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
236 Op_fxch0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
237 Op_SizedStack, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
238 Op_bound, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
239 Op_bswap, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
240 Op_cmps, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
241 Op_cmpsd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
242 Op_cmpsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
243 Op_cmpxchg8b, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
244 Op_cmpxchg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
245 Op_cpuid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
246 Op_enter, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
247 Op_fdisi, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
248 Op_feni, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
249 Op_fsetpm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
250 Op_fXstsw, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
251 Op_imul, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
252 Op_imul2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
253 Op_imul1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
254 Op_in, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
255 Op_ins, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
256 Op_insX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
257 Op_iret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
258 Op_iretd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
259 Op_lods, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
260 Op_lodsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
261 Op_movs, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
262 Op_movsd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
263 Op_movsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
264 Op_movsx, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
265 Op_movzx, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
266 Op_mul, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
267 Op_out, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
268 Op_outs, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
269 Op_outsX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
270 Op_push, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
271 Op_ret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
272 Op_retf, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
273 Op_scas, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
274 Op_scasX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
275 Op_stos, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
276 Op_stosX, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
277 Op_xlat, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
278 N_AsmOpInfo, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
279 Op_Align, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
280 Op_Even, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
281 Op_Naked, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
282 Op_db, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
283 Op_ds, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
284 Op_di, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
285 Op_dl, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
286 Op_df, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
287 Op_dd, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
288 Op_de |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
289 } AsmOp; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
290 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
291 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
292 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
293 Opr_None = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
294 OprC_MRI = 1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
295 OprC_MR = 2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
296 OprC_Mem = 3, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
297 OprC_Reg = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
298 OprC_Imm = 5, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
299 OprC_SSE = 6, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
300 OprC_SSE_Mem = 7, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
301 OprC_R32 = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
302 OprC_RWord = 9, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
303 OprC_RFP = 10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
304 OprC_AbsRel = 11, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
305 OprC_Relative = 12, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
306 OprC_Port = 13, // DX or imm |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
307 OprC_AX = 14, // AL,AX,EAX |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
308 OprC_DX = 15, // only DX |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
309 OprC_MMX = 16, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
310 OprC_MMX_Mem = 17, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
311 OprC_Shift = 18, // imm or CL |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
312 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
313 Opr_ClassMask = 0x1f, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
314 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
315 Opr_Dest = 0x20, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
316 Opr_Update = 0x60, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
317 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
318 Opr_NoType = 0x80, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
319 } OprVals; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
320 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
321 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
322 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
323 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
324 } AsmOprInfo; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
325 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
326 typedef unsigned char Opr; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
327 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
328 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
329 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
330 Opr operands[3]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
331 unsigned char |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
332 needsType : 3, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
333 implicitClobbers : 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
334 linkType : 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
335 unsigned link; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
336 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
337 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
338 bool takesLabel() { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
339 return operands[0] & Opr_Label; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
340 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
341 */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
342 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
343 unsigned nOperands() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
344 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
345 if ( !operands[0] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
346 return 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
347 else if ( !operands[1] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
348 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
349 else if ( !operands[2] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
350 return 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
351 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
352 return 3; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
353 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
354 } AsmOpInfo; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
355 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
356 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
357 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
358 Mn_fdisi, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
359 Mn_feni, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
360 Mn_fsetpm, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
361 Mn_iretw, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
362 Mn_iret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
363 Mn_lret, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
364 Mn_cmpxchg8b, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
365 N_AltMn |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
366 } Alternate_Mnemonics; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
367 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
368 static const char * alternateMnemonics[N_AltMn] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
369 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
370 ".byte 0xdb, 0xe1", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
371 ".byte 0xdb, 0xe0", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
372 ".byte 0xdb, 0xe4", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
373 "iretw", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
374 "iret", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
375 "lret", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
376 "cmpxchg8b" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
377 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
378 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
379 #define mri OprC_MRI |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
380 #define mr OprC_MR |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
381 #define mem OprC_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
382 // for now mfp=mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
383 #define mfp OprC_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
384 #define reg OprC_Reg |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
385 #define imm OprC_Imm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
386 #define sse OprC_SSE |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
387 #define ssem OprC_SSE_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
388 #define mmx OprC_MMX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
389 #define mmxm OprC_MMX_Mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
390 #define r32 OprC_R32 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
391 #define rw OprC_RWord |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
392 #define rfp OprC_RFP |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
393 #define port OprC_Port |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
394 #define ax OprC_AX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
395 #define dx OprC_DX |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
396 #define shft OprC_Shift |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
397 #define D Opr_Dest |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
398 #define U Opr_Update |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
399 #define N Opr_NoType |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
400 //#define L Opr_Label |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
401 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
402 // D=dest, N=notype |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
403 static AsmOpInfo asmOpInfo[N_AsmOpInfo] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
404 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
405 /* Op_Invalid */ {}, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
406 /* Op_Adjust */ { 0,0,0, 0, Clb_EAX /*just AX*/ }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
407 /* Op_Dst */ { D|mr, 0, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
408 /* Op_Upd */ { U|mr, 0, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
409 /* Op_DstW */ { D|mr, 0, 0, Word_Types }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
410 /* Op_DstF */ { D|mr, 0, 0, 1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
411 /* Op_UpdF */ { U|mr, 0, 0, 1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
412 /* Op_DstSrc */ { D|mr, mri, 0,/**/1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
413 /* Op_DstSrcF */ { D|mr, mri, 0,/**/1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
414 /* Op_UpdSrcF */ { U|mr, mri, 0,/**/1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
415 /* Op_DstSrcFW */ { D|mr, mri, 0,/**/Word_Types, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
416 /* Op_UpdSrcFW */ { U|mr, mri, 0,/**/Word_Types, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
417 /* Op_DstSrcSSE */ { U|sse, ssem, 0 }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
418 /* Op_DstSrcMMX */ { U|mmx, mmxm, 0 }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
419 /* Op_DstSrcImmS*/ { U|sse, ssem, N|imm }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
420 /* Op_DstSrcImmM*/ { U|mmx, mmxm, N|imm }, // some may not be update %% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
421 /* Op_UpdSrcShft*/ { U|mr, reg, N|shft, 1, Clb_Flags }, // 16/32 only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
422 /* Op_DstSrcNT */ { D|mr, mr, 0, 0 }, // used for movd .. operands can be rm32,sse,mmx |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
423 /* Op_UpdSrcNT */ { U|mr, mr, 0, 0 }, // used for movd .. operands can be rm32,sse,mmx |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
424 /* Op_DstMemNT */ { D|mem, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
425 /* Op_DstRMBNT */ { D|mr, 0, 0, Byte_NoType }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
426 /* Op_DstRMWNT */ { D|mr, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
427 /* Op_UpdUpd */ { U|mr,U|mr, 0,/**/1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
428 /* Op_UpdUpdF */ { U|mr,U|mr, 0,/**/1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
429 /* Op_Src */ { mri, 0, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
430 /* Op_SrcRMWNT */ { mr, 0, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
431 /* Op_SrcW */ { mri, 0, 0, Word_Types }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
432 /* Op_SrcImm */ { imm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
433 /* Op_Src_DXAXF */ { mr, 0, 0, 1, Clb_SizeDXAX|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
434 /* Op_SrcMemNT */ { mem, 0, 0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
435 /* Op_SrcMemNTF */ { mem, 0, 0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
436 /* Op_SrcSrc */ { mr, mri, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
437 /* Op_SrcSrcF */ { mr, mri, 0, 1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
438 /* Op_SrcSrcFW */ { mr, mri, 0, Word_Types, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
439 /* Op_SrcSrcSSEF*/ { sse, ssem, 0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
440 /* Op_SrcSrcMMX */ { mmx, mmx, 0, }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
441 /* Op_Shift */ { D|mr,N|shft, 0,/**/1, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
442 /* Op_Branch */ { mri }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
443 /* Op_CBranch */ { imm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
444 /* Op_0 */ { 0,0,0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
445 /* Op_0_AX */ { 0,0,0, 0, Clb_SizeAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
446 /* Op_0_DXAX */ { 0,0,0, 0, Clb_SizeDXAX }, // but for cwd/cdq -- how do know the size.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
447 /* Op_Loop */ { imm, 0, 0, 0, Clb_CX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
448 /* Op_Flags */ { 0,0,0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
449 /* Op_F0_ST */ { 0,0,0, 0, Clb_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
450 /* Op_F0_P */ { 0,0,0, 0, Clb_ST }, // push, pops, etc. not sure how to inform gcc.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
451 /* Op_Fs_P */ { mem, 0, 0, 0, Clb_ST }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
452 /* Op_Fis */ { mem, 0, 0, FPInt_Types }, // only 16bit and 32bit, DMD defaults to 16bit |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
453 /* Op_Fis_ST */ { mem, 0, 0, FPInt_Types, Clb_ST }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
454 /* Op_Fis_P */ { mem, 0, 0, FPInt_Types, Clb_ST }, // push and pop, fild so also 64 bit |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
455 /* Op_Fid */ { D|mem, 0, 0, FPInt_Types }, // only 16bit and 32bit, DMD defaults to 16bit |
1105
cdb7e1167803
- Fixed building tango-user-ldc on x86-32.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1102
diff
changeset
|
456 /* Op_Fid_P */ { D|mem, 0, 0, 0, Clb_ST, Next_Form, Op_FidR_P }, // push and pop, fild so also 64 bit |
cdb7e1167803
- Fixed building tango-user-ldc on x86-32.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1102
diff
changeset
|
457 /* Op_FidR_P */ { D|mem,rfp, 0, 0, Clb_ST }, // push and pop, fild so also 64 bit |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
458 /* Op_Ffd */ { D|mfp, 0, 0, FP_Types, 0, Next_Form, Op_FfdR }, // only 16bit and 32bit, DMD defaults to 16bit, reg form doesn't need type |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
459 /* Op_FfdR */ { D|rfp, 0, 0 }, |
1056
cc723604da95
Fixed two operand form of X86 fstp instruction. (throw away second operand!)
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
944
diff
changeset
|
460 /* Op_Ffd_P */ { D|mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_FfdR_P }, // pop, fld so also 80 bit, " |
cc723604da95
Fixed two operand form of X86 fstp instruction. (throw away second operand!)
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
944
diff
changeset
|
461 /* Op_FfdR_P */ { D|rfp, 0, 0, 0, Clb_ST, Next_Form, Op_FfdRR_P }, |
1106
feca4947d1f2
Corrected bad asm match for fstp on x86-32
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1105
diff
changeset
|
462 /* Op_FfdRR_P */ { D|rfp, rfp, 0, 0, Clb_ST }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
463 /* Op_Fd_P */ { D|mem, 0, 0, 0, Clb_ST }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
464 /* Op_FdST */ { D|rfp, 0, 0 }, |
1092
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
465 /* Op_FMath */ { mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_FMath0 }, // and only single or double prec |
1101
8bf8b058944a
Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents:
1100
diff
changeset
|
466 /* Op_FMath0 */ { 0, 0, 0, 0, Clb_ST, Next_Form, Op_FMath2 }, |
8bf8b058944a
Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents:
1100
diff
changeset
|
467 /* Op_FMath2 */ { D|rfp, rfp, 0, 0, Clb_ST, Next_Form, Op_FdST0ST1 }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
468 /* Op_FdSTiSTi */ { D|rfp, rfp, 0, }, |
1092
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
469 /* Op_FdST0ST1 */ { 0, 0, 0, }, |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
470 /* Op_FPMath */ { D|rfp, rfp, 0, 0, Clb_ST, Next_Form, Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
471 /* Op_FCmp */ { mfp, 0, 0, FP_Types, 0, Next_Form, Op_FCmp1 }, // DMD defaults to float ptr |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
472 /* Op_FCmp1 */ { rfp, 0, 0, 0, 0, Next_Form, Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
473 /* Op_FCmpP */ { mfp, 0, 0, FP_Types, 0, Next_Form, Op_FCmpP1 }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
474 /* Op_FCmpP1 */ { rfp, 0, 0, 0, 0, Next_Form, Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
475 /* Op_FCmpFlg */ { rfp, rfp, 0, 0, Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
476 /* Op_FCmpFlgP */ { rfp, rfp, 0, 0, Clb_Flags }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
477 /* Op_fld */ { mfp, 0, 0, FP_Types, Clb_ST, Next_Form, Op_fldR }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
478 /* Op_fldR */ { rfp, 0, 0, 0, Clb_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
479 /* Op_fxch */ { D|rfp,D|rfp, 0, 0, Clb_ST, Next_Form, Op_fxch1 }, // not in intel manual?, but DMD allows it (gas won't), second arg must be ST |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
480 /* Op_fxch1 */ { D|rfp, 0, 0, 0, Clb_ST, Next_Form, Op_fxch0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
481 /* Op_fxch0 */ { 0, 0, 0, 0, Clb_ST }, // Also clobbers ST(1) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
482 /* Op_SizedStack*/ { 0, 0, 0, 0, Clb_SP }, // type suffix special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
483 /* Op_bound */ { mr, mri, 0, Word_Types }, // operands *not* reversed for gas |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
484 /* Op_bswap */ { D|r32 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
485 /* Op_cmps */ { mem, mem, 0, 1, Clb_DI|Clb_SI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
486 /* Op_cmpsd */ { 0, 0, 0, 0, Clb_DI|Clb_SI|Clb_Flags, Next_Form, Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
487 /* Op_cmpsX */ { 0, 0, 0, 0, Clb_DI|Clb_SI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
488 /* Op_cmpxchg8b */ { D|mem/*64*/,0,0, 0, Clb_SizeDXAX/*32*/|Clb_Flags, Out_Mnemonic, Mn_cmpxchg8b }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
489 /* Op_cmpxchg */ { D|mr, reg, 0, 1, Clb_SizeAX|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
490 /* Op_cpuid */ { 0,0,0 }, // Clobbers eax, ebx, ecx, and edx. Handled specially below. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
491 /* Op_enter */ { imm, imm }, // operands *not* reversed for gas, %% inform gcc of EBP clobber?, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
492 /* Op_fdisi */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_fdisi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
493 /* Op_feni */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_feni }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
494 /* Op_fsetpm */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_fsetpm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
495 /* Op_fXstsw */ { D|mr, 0, 0, }, // ax is the only allowed register |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
496 /* Op_imul */ { D|reg, mr, imm, 1, Clb_Flags, Next_Form, Op_imul2 }, // 16/32 only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
497 /* Op_imul2 */ { D|reg, mri, 0, 1, Clb_Flags, Next_Form, Op_imul1 }, // 16/32 only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
498 /* Op_imul1 */ { mr, 0, 0, 1, Clb_Flags|Clb_SizeDXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
499 /* Op_in */ { D|ax,N|port,0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
500 /* Op_ins */ { mem,N|dx, 0, 1, Clb_DI }, // can't override ES segment for this one |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
501 /* Op_insX */ { 0, 0, 0, 0, Clb_DI }, // output segment overrides %% needs work |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
502 /* Op_iret */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_iretw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
503 /* Op_iretd */ { 0,0,0, 0, 0, Out_Mnemonic, Mn_iret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
504 /* Op_lods */ { mem, 0, 0, 1, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
505 /* Op_lodsX */ { 0, 0, 0, 0, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
506 /* Op_movs */ { mem, mem, 0, 1, Clb_DI|Clb_SI }, // only src/DS can be overridden |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
507 /* Op_movsd */ { 0, 0, 0, 0, Clb_DI|Clb_SI, Next_Form, Op_DstSrcSSE }, // %% gas doesn't accept movsd .. has to movsl |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
508 /* Op_movsX */ { 0, 0, 0, 0, Clb_DI|Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
509 /* Op_movsx */ { D|reg, mr, 0, 1 }, // type suffix is special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
510 /* Op_movzx */ { D|reg, mr, 0, 1 }, // type suffix is special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
511 /* Op_mul */ { U|ax, mr, 0, 1, Clb_SizeDXAX|Clb_Flags, Next_Form, Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
512 /* Op_out */ { N|port,ax, 0, 1 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
513 /* Op_outs */ { N|dx, mem, 0, 1, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
514 /* Op_outsX */ { 0, 0, 0, 0, Clb_SI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
515 /* Op_push */ { mri, 0, 0, Word_Types, Clb_SP }, // would be Op_SrcW, but DMD defaults to 32-bit for immediate form |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
516 /* Op_ret */ { imm, 0, 0, 0, 0, Next_Form, Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
517 /* Op_retf */ { 0, 0, 0, 0, 0, Out_Mnemonic, Mn_lret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
518 /* Op_scas */ { mem, 0, 0, 1, Clb_DI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
519 /* Op_scasX */ { 0, 0, 0, 0, Clb_DI|Clb_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
520 /* Op_stos */ { mem, 0, 0, 1, Clb_DI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
521 /* Op_stosX */ { 0, 0, 0, 0, Clb_DI }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
522 /* Op_xlat */ { mem, 0, 0, 0, Clb_SizeAX } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
523 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
524 /// * Op_arpl */ { D|mr, reg }, // 16 only -> DstSrc |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
525 /// * Op_bsX */ { rw, mrw, 0, 1, Clb_Flags },//->srcsrcf |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
526 /// * Op_bt */ { mrw, riw, 0, 1, Clb_Flags },//->srcsrcf |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
527 /// * Op_btX */ { D|mrw, riw, 0, 1, Clb_Flags },//->dstsrcf .. immediate does not contribute to size |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
528 /// * Op_cmovCC */ { D|rw, mrw, 0, 1 } // ->dstsrc |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
529 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
530 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
531 #undef mri |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
532 #undef mr |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
533 #undef mem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
534 #undef mfp |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
535 #undef reg |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
536 #undef imm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
537 #undef sse |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
538 #undef ssem |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
539 #undef mmx |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
540 #undef mmxm |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
541 #undef r32 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
542 #undef rw |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
543 #undef rfp |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
544 #undef port |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
545 #undef ax |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
546 #undef dx |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
547 #undef shft |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
548 #undef D |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
549 #undef U |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
550 #undef N |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
551 //#undef L |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
552 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
553 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
554 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
555 const char * inMnemonic; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
556 AsmOp asmOp; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
557 } AsmOpEnt; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
558 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
559 /* Some opcodes which have data size restrictions, but we don't check |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
560 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
561 cmov, l<segreg> ?, lea, lsl, shld |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
562 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
563 todo: push <immediate> is always the 32-bit form, even tho push <mem> is 16-bit |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
564 */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
565 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
566 static AsmOpEnt opData[] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
567 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
568 { "aaa", Op_Adjust }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
569 { "aad", Op_Adjust }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
570 { "aam", Op_Adjust }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
571 { "aas", Op_Adjust }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
572 { "adc", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
573 { "add", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
574 { "addpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
575 { "addps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
576 { "addsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
577 { "addss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
578 { "addsubpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
579 { "addsubps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
580 { "align", Op_Align }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
581 { "and", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
582 { "andnpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
583 { "andnps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
584 { "andpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
585 { "andps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
586 { "arpl", Op_UpdSrcNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
587 { "bound", Op_bound }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
588 { "bsf", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
589 { "bsr", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
590 { "bswap", Op_bswap }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
591 { "bt", Op_SrcSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
592 { "btc", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
593 { "btr", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
594 { "bts", Op_UpdSrcFW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
595 { "call", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
596 { "cbw", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
597 { "cdq", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
598 { "clc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
599 { "cld", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
600 { "clflush",Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
601 { "cli", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
602 { "clts", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
603 { "cmc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
604 { "cmova", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
605 { "cmovae", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
606 { "cmovb", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
607 { "cmovbe", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
608 { "cmovc", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
609 { "cmove", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
610 { "cmovg", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
611 { "cmovge", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
612 { "cmovl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
613 { "cmovle", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
614 { "cmovna", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
615 { "cmovnae",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
616 { "cmovnb", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
617 { "cmovnbe",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
618 { "cmovnc", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
619 { "cmovne", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
620 { "cmovng", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
621 { "cmovnge",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
622 { "cmovnl", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
623 { "cmovnle",Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
624 { "cmovno", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
625 { "cmovnp", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
626 { "cmovns", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
627 { "cmovnz", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
628 { "cmovo", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
629 { "cmovp", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
630 { "cmovpe", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
631 { "cmovpo", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
632 { "cmovs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
633 { "cmovz", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
634 { "cmp", Op_SrcSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
635 { "cmppd", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
636 { "cmpps", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
637 { "cmps", Op_cmps }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
638 { "cmpsb", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
639 { "cmpsd", Op_cmpsd }, // string cmp, and SSE cmp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
640 { "cmpss", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
641 { "cmpsw", Op_cmpsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
642 { "cmpxch8b", Op_cmpxchg8b }, // %% DMD opcode typo? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
643 { "cmpxchg", Op_cmpxchg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
644 { "comisd", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
645 { "comiss", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
646 { "cpuid", Op_cpuid }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
647 { "cvtdq2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
648 { "cvtdq2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
649 { "cvtpd2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
650 { "cvtpd2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
651 { "cvtpd2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
652 { "cvtpi2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
653 { "cvtpi2ps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
654 { "cvtps2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
655 { "cvtps2pd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
656 { "cvtps2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
657 { "cvtsd2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
658 { "cvtsd2ss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
659 { "cvtsi2sd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
660 { "cvtsi2ss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
661 { "cvtss2sd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
662 { "cvtss2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
663 { "cvttpd2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
664 { "cvttpd2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
665 { "cvttps2dq", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
666 { "cvttps2pi", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
667 { "cvttsd2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
668 { "cvttss2si", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
669 { "cwd", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
670 { "cwde", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
671 //{ "da", Op_ },// dunno what this is -- takes labels? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
672 { "daa", Op_Adjust }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
673 { "das", Op_Adjust }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
674 { "db", Op_db }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
675 { "dd", Op_dd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
676 { "de", Op_de }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
677 { "dec", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
678 { "df", Op_df }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
679 { "di", Op_di }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
680 { "div", Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
681 { "divpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
682 { "divps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
683 { "divsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
684 { "divss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
685 { "dl", Op_dl }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
686 { "dq", Op_dl }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
687 { "ds", Op_ds }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
688 { "dt", Op_de }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
689 { "dw", Op_ds }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
690 { "emms", Op_0 }, // clobber all mmx/fp? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
691 { "enter", Op_enter }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
692 { "even", Op_Even }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
693 { "f2xm1", Op_F0_ST }, // %% most of these are update... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
694 { "fabs", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
695 { "fadd", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
696 { "faddp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
697 { "fbld", Op_Fs_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
698 { "fbstp", Op_Fd_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
699 { "fchs", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
700 { "fclex", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
701 { "fcmovb", Op_FdSTiSTi }, // but only ST(0) can be the destination -- should be FdST0STi |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
702 { "fcmovbe", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
703 { "fcmove", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
704 { "fcmovnb", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
705 { "fcmovnbe", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
706 { "fcmovne", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
707 { "fcmovnu", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
708 { "fcmovu", Op_FdSTiSTi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
709 { "fcom", Op_FCmp }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
710 { "fcomi", Op_FCmpFlg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
711 { "fcomip", Op_FCmpFlgP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
712 { "fcomp", Op_FCmpP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
713 { "fcompp", Op_F0_P }, // pops twice |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
714 { "fcos", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
715 { "fdecstp",Op_F0_P }, // changes stack |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
716 { "fdisi", Op_fdisi }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
717 { "fdiv", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
718 { "fdivp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
719 { "fdivr", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
720 { "fdivrp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
721 { "feni", Op_feni }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
722 { "ffree", Op_FdST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
723 { "fiadd", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
724 { "ficom", Op_Fis }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
725 { "ficomp", Op_Fis_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
726 { "fidiv", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
727 { "fidivr", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
728 { "fild", Op_Fis_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
729 { "fimul", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
730 { "fincstp",Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
731 { "finit", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
732 { "fist", Op_Fid }, // only 16,32bit |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
733 { "fistp", Op_Fid_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
734 { "fisttp", Op_Fid_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
735 { "fisub", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
736 { "fisubr", Op_Fis_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
737 { "fld", Op_fld }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
738 { "fld1", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
739 { "fldcw", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
740 { "fldenv", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
741 { "fldl2e", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
742 { "fldl2t", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
743 { "fldlg2", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
744 { "fldln2", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
745 { "fldpi", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
746 { "fldz", Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
747 { "fmul", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
748 { "fmulp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
749 { "fnclex", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
750 { "fndisi", Op_fdisi }, // ?? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
751 { "fneni", Op_feni }, // ?? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
752 { "fninit", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
753 { "fnop", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
754 { "fnsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
755 { "fnstcw", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
756 { "fnstenv",Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
757 { "fnstsw", Op_fXstsw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
758 { "fpatan", Op_F0_P }, // pop and modify new ST |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
759 { "fprem", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
760 { "fprem1", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
761 { "fptan", Op_F0_P }, // modify ST and push 1.0 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
762 { "frndint",Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
763 { "frstor", Op_SrcMemNT }, // but clobbers everything |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
764 { "fsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
765 { "fscale", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
766 { "fsetpm", Op_fsetpm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
767 { "fsin", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
768 { "fsincos",Op_F0_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
769 { "fsqrt", Op_F0_ST }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
770 { "fst", Op_Ffd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
771 { "fstcw", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
772 { "fstenv", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
773 { "fstp", Op_Ffd_P }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
774 { "fstsw", Op_fXstsw }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
775 { "fsub", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
776 { "fsubp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
777 { "fsubr", Op_FMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
778 { "fsubrp", Op_FPMath }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
779 { "ftst", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
780 { "fucom", Op_FCmp }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
781 { "fucomi", Op_FCmpFlg }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
782 { "fucomip",Op_FCmpFlgP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
783 { "fucomp", Op_FCmpP }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
784 { "fucompp",Op_F0_P }, // pops twice |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
785 { "fwait", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
786 { "fxam", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
787 { "fxch", Op_fxch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
788 { "fxrstor",Op_SrcMemNT }, // clobbers FP,MMX,SSE |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
789 { "fxsave", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
790 { "fxtract",Op_F0_P }, // pushes |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
791 { "fyl2x", Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
792 { "fyl2xp1",Op_F0_P }, // pops |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
793 { "haddpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
794 { "haddps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
795 { "hlt", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
796 { "hsubpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
797 { "hsubps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
798 { "idiv", Op_Src_DXAXF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
799 { "imul", Op_imul }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
800 { "in", Op_in }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
801 { "inc", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
802 { "ins", Op_ins }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
803 { "insb", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
804 { "insd", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
805 { "insw", Op_insX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
806 { "int", Op_SrcImm }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
807 { "into", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
808 { "invd", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
809 { "invlpg", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
810 { "iret", Op_iret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
811 { "iretd", Op_iretd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
812 { "ja", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
813 { "jae", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
814 { "jb", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
815 { "jbe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
816 { "jc", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
817 { "jcxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
818 { "je", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
819 { "jecxz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
820 { "jg", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
821 { "jge", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
822 { "jl", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
823 { "jle", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
824 { "jmp", Op_Branch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
825 { "jna", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
826 { "jnae", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
827 { "jnb", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
828 { "jnbe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
829 { "jnc", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
830 { "jne", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
831 { "jng", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
832 { "jnge", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
833 { "jnl", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
834 { "jnle", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
835 { "jno", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
836 { "jnp", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
837 { "jns", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
838 { "jnz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
839 { "jo", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
840 { "jp", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
841 { "jpe", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
842 { "jpo", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
843 { "js", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
844 { "jz", Op_CBranch }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
845 { "lahf", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
846 { "lar", Op_DstSrcFW }, // reg dest only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
847 { "lddqu", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
848 { "ldmxcsr", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
849 { "lds", Op_DstSrc }, // reg dest only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
850 { "lea", Op_DstSrc }, // " |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
851 { "leave", Op_0 }, // EBP,ESP clobbers |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
852 { "les", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
853 { "lfence",Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
854 { "lfs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
855 { "lgdt", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
856 { "lgs", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
857 { "lidt", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
858 { "lldt", Op_SrcRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
859 { "lmsw", Op_SrcRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
860 { "lock", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
861 { "lods", Op_lods }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
862 { "lodsb", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
863 { "lodsd", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
864 { "lodsw", Op_lodsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
865 { "loop", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
866 { "loope", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
867 { "loopne",Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
868 { "loopnz",Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
869 { "loopz", Op_Loop }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
870 { "lsl", Op_DstSrcFW }, // reg dest only |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
871 { "lss", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
872 { "ltr", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
873 { "maskmovdqu", Op_SrcSrcMMX }, // writes to [edi] |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
874 { "maskmovq", Op_SrcSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
875 { "maxpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
876 { "maxps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
877 { "maxsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
878 { "maxss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
879 { "mfence",Op_0}, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
880 { "minpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
881 { "minps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
882 { "minsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
883 { "minss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
884 { "monitor", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
885 { "mov", Op_DstSrc }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
886 { "movapd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
887 { "movaps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
888 { "movd", Op_DstSrcNT }, // also mmx and sse |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
889 { "movddup", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
890 { "movdq2q", Op_DstSrcNT }, // mmx/sse |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
891 { "movdqa", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
892 { "movdqu", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
893 { "movhlps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
894 { "movhpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
895 { "movhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
896 { "movlhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
897 { "movlpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
898 { "movlps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
899 { "movmskpd",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
900 { "movmskps",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
901 { "movntdq", Op_DstSrcNT }, // limited to sse, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
902 { "movnti", Op_DstSrcNT }, // limited to gpr, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
903 { "movntpd", Op_DstSrcNT }, // limited to sse, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
904 { "movntps", Op_DstSrcNT }, // limited to sse, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
905 { "movntq", Op_DstSrcNT }, // limited to mmx, but mem dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
906 { "movq", Op_DstSrcNT }, // limited to sse and mmx |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
907 { "movq2dq", Op_DstSrcNT }, // limited to sse <- mmx regs |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
908 { "movs", Op_movs }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
909 { "movsb", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
910 { "movsd", Op_movsd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
911 { "movshdup", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
912 { "movsldup", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
913 { "movss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
914 { "movsw", Op_movsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
915 { "movsx", Op_movsx }, // word-only, reg dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
916 { "movupd",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
917 { "movups",Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
918 { "movzx", Op_movzx }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
919 { "mul", Op_mul }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
920 { "mulpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
921 { "mulps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
922 { "mulsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
923 { "mulss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
924 { "mwait", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
925 { "naked", Op_Naked }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
926 { "neg", Op_UpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
927 { "nop", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
928 { "not", Op_Upd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
929 { "or", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
930 { "orpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
931 { "orps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
932 { "out", Op_out }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
933 { "outs", Op_outs }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
934 { "outsb", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
935 { "outsd", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
936 { "outsw", Op_outsX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
937 { "packssdw", Op_DstSrcMMX }, // %% also SSE |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
938 { "packsswb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
939 { "packuswb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
940 { "paddb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
941 { "paddd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
942 { "paddq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
943 { "paddsb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
944 { "paddsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
945 { "paddusb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
946 { "paddusw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
947 { "paddw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
948 { "pand", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
949 { "pandn", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
950 { "pavgb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
951 { "pavgw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
952 { "pcmpeqb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
953 { "pcmpeqd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
954 { "pcmpeqw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
955 { "pcmpgtb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
956 { "pcmpgtd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
957 { "pcmpgtw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
958 { "pextrw", Op_DstSrcImmM }, // gpr32 dest |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
959 { "pinsrw", Op_DstSrcImmM }, // gpr32(16), mem16 src, sse too |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
960 { "pmaddwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
961 { "pmaxsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
962 { "pmaxub", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
963 { "pminsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
964 { "pminub", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
965 { "pmovmskb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
966 { "pmulhuw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
967 { "pmulhw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
968 { "pmullw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
969 { "pmuludq", Op_DstSrcMMX }, // also sse |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
970 { "pop", Op_DstW }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
971 { "popa", Op_SizedStack }, // For intel this is always 16-bit |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
972 { "popad", Op_SizedStack }, // GAS doesn't accept 'popad' -- these clobber everything, but supposedly it would be used to preserve clobbered regs |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
973 { "popf", Op_SizedStack }, // rewrite the insn with a special case |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
974 { "popfd", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
975 { "por", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
976 { "prefetchnta", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
977 { "prefetcht0", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
978 { "prefetcht1", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
979 { "prefetcht2", Op_SrcMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
980 { "psadbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
981 { "pshufd", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
982 { "pshufhw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
983 { "pshuflw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
984 { "pshufw", Op_DstSrcImmM }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
985 { "pslld", Op_DstSrcMMX }, // immediate operands... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
986 { "pslldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
987 { "psllq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
988 { "psllw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
989 { "psrad", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
990 { "psraw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
991 { "psrld", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
992 { "psrldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
993 { "psrlq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
994 { "psrlw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
995 { "psubb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
996 { "psubd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
997 { "psubq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
998 { "psubsb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
999 { "psubsw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1000 { "psubusb", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1001 { "psubusw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1002 { "psubw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1003 { "punpckhbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1004 { "punpckhdq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1005 { "punpckhqdq",Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1006 { "punpckhwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1007 { "punpcklbw", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1008 { "punpckldq", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1009 { "punpcklqdq",Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1010 { "punpcklwd", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1011 { "push", Op_push }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1012 { "pusha", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1013 { "pushad", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1014 { "pushf", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1015 { "pushfd", Op_SizedStack }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1016 { "pxor", Op_DstSrcMMX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1017 { "rcl", Op_Shift }, // limited src operands -- change to shift |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1018 { "rcpps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1019 { "rcpss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1020 { "rcr", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1021 { "rdmsr", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1022 { "rdpmc", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1023 { "rdtsc", Op_0_DXAX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1024 { "rep", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1025 { "repe", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1026 { "repne", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1027 { "repnz", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1028 { "repz", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1029 { "ret", Op_ret }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1030 { "retf", Op_retf }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1031 { "rol", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1032 { "ror", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1033 { "rsm", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1034 { "rsqrtps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1035 { "rsqrtss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1036 { "sahf", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1037 { "sal", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1038 { "sar", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1039 { "sbb", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1040 { "scas", Op_scas }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1041 { "scasb", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1042 { "scasd", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1043 { "scasw", Op_scasX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1044 { "seta", Op_DstRMBNT }, // also gpr8 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1045 { "setae", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1046 { "setb", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1047 { "setbe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1048 { "setc", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1049 { "sete", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1050 { "setg", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1051 { "setge", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1052 { "setl", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1053 { "setle", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1054 { "setna", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1055 { "setnae", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1056 { "setnb", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1057 { "setnbe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1058 { "setnc", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1059 { "setne", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1060 { "setng", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1061 { "setnge", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1062 { "setnl", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1063 { "setnle", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1064 { "setno", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1065 { "setnp", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1066 { "setns", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1067 { "setnz", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1068 { "seto", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1069 { "setp", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1070 { "setpe", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1071 { "setpo", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1072 { "sets", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1073 { "setz", Op_DstRMBNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1074 { "sfence", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1075 { "sgdt", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1076 { "shl", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1077 { "shld", Op_UpdSrcShft }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1078 { "shr", Op_Shift }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1079 { "shrd", Op_UpdSrcShft }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1080 { "shufpd", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1081 { "shufps", Op_DstSrcImmS }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1082 { "sidt", Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1083 { "sldt", Op_DstRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1084 { "smsw", Op_DstRMWNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1085 { "sqrtpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1086 { "sqrtps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1087 { "sqrtsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1088 { "sqrtss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1089 { "stc", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1090 { "std", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1091 { "sti", Op_Flags }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1092 { "stmxcsr",Op_DstMemNT }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1093 { "stos", Op_stos }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1094 { "stosb", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1095 { "stosd", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1096 { "stosw", Op_stosX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1097 { "str", Op_DstMemNT }, // also r16 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1098 { "sub", Op_UpdSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1099 { "subpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1100 { "subps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1101 { "subsd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1102 { "subss", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1103 { "sysenter",Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1104 { "sysexit", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1105 { "test", Op_SrcSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1106 { "ucomisd", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1107 { "ucomiss", Op_SrcSrcSSEF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1108 { "ud2", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1109 { "unpckhpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1110 { "unpckhps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1111 { "unpcklpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1112 { "unpcklps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1113 { "verr", Op_SrcMemNTF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1114 { "verw", Op_SrcMemNTF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1115 { "wait", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1116 { "wbinvd", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1117 { "wrmsr", Op_0 }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1118 { "xadd", Op_UpdUpdF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1119 { "xchg", Op_UpdUpd }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1120 { "xlat", Op_xlat }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1121 { "xlatb", Op_0_AX }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1122 { "xor", Op_DstSrcF }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1123 { "xorpd", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1124 { "xorps", Op_DstSrcSSE }, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1125 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1126 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1127 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1128 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1129 Default_Ptr = 0, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1130 Byte_Ptr = 1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1131 Short_Ptr = 2, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1132 Int_Ptr = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1133 QWord_Ptr = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1134 Float_Ptr = 4, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1135 Double_Ptr = 8, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1136 Extended_Ptr = 10, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1137 Near_Ptr = 98, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1138 Far_Ptr = 99, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1139 N_PtrTypes |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1140 } PtrType; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1141 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1142 static const int N_PtrNames = 8; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1143 static const char * ptrTypeNameTable[N_PtrNames] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1144 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1145 "word", "dword", "qword", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1146 "float", "double", "extended", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1147 "near", "far" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1148 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1149 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1150 static Identifier * ptrTypeIdentTable[N_PtrNames]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1151 static PtrType ptrTypeValueTable[N_PtrNames] = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1152 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1153 Short_Ptr, Int_Ptr, QWord_Ptr, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1154 Float_Ptr, Double_Ptr, Extended_Ptr, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1155 Near_Ptr, Far_Ptr |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1156 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1157 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1158 typedef enum |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1159 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1160 Opr_Invalid, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1161 Opr_Immediate, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1162 Opr_Reg, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1163 Opr_Mem |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1164 } OperandClass; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1165 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1166 /* kill inlining if we reference a local? */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1167 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1168 /* DMD seems to allow only one 'symbol' per operand .. include __LOCAL_SIZE */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1169 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1170 /* DMD offset usage: <parm>[<reg>] seems to always be relative to EBP+8 .. even |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1171 if naked.. */ |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1172 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1173 // mov eax, 4 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1174 // mov eax, fs:4 |
871
e70a0e7e2260
Apply duane's patch for align power-of-two checking in inline asm. Fixes #159
Christian Kamm <kamm incasoftware de>
parents:
793
diff
changeset
|
1175 // -- have to assume we know whether or not to use '$' |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1176 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1177 static Token eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1178 static Expression * Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1179 static Identifier * ident_seg; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1180 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1181 struct AsmProcessor |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1182 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1183 typedef struct |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1184 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1185 int inBracket; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1186 int hasBracket; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1187 int hasNumber; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1188 int isOffset; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1189 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1190 Reg segmentPrefix; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1191 Reg reg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1192 sinteger_t constDisplacement; // use to build up.. should be int constant in the end.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1193 Array symbolDisplacement; // array of expressions or.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1194 Reg baseReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1195 Reg indexReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1196 int scale; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1197 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1198 OperandClass cls; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1199 PtrType dataSize; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1200 PtrType dataSizeHint; // DMD can use the type of a referenced variable |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1201 } Operand; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1202 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1203 static const unsigned Max_Operands = 3; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1204 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1205 AsmStatement * stmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1206 Scope * sc; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1207 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1208 Token * token; |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1209 std::ostringstream insnTemplate; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1210 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1211 AsmOp op; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1212 AsmOpInfo * opInfo; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1213 Operand operands[Max_Operands]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1214 Identifier * opIdent; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1215 Operand * operand; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1216 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1217 AsmProcessor ( Scope * sc, AsmStatement * stmt ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1218 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1219 this->sc = sc; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1220 this->stmt = stmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1221 token = stmt->tokens; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1222 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1223 opInfo = NULL; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1224 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1225 if ( ! regInfo[0].ident ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1226 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1227 char buf[8], *p; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1228 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1229 for ( int i = 0; i < N_Regs; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1230 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1231 strncpy ( buf, regInfo[i].name, sizeof ( buf ) - 1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1232 for ( p = buf; *p; p++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1233 *p = std::tolower ( *p ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1234 regInfo[i].gccName = std::string ( buf, p - buf ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1235 if ( ( i <= Reg_ST || i > Reg_ST7 ) && i != Reg_EFLAGS ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1236 regInfo[i].ident = Lexer::idPool ( regInfo[i].name ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1237 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1238 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1239 for ( int i = 0; i < N_PtrNames; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1240 ptrTypeIdentTable[i] = Lexer::idPool ( ptrTypeNameTable[i] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1241 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1242 Handled = new Expression ( 0, TOKvoid, sizeof ( Expression ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1243 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1244 ident_seg = Lexer::idPool ( "seg" ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1245 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1246 eof_tok.value = TOKeof; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1247 eof_tok.next = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1248 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1249 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1250 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1251 void run() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1252 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1253 parse(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1254 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1255 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1256 void nextToken() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1257 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1258 if ( token->next ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1259 token = token->next; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1260 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1261 token = & eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1262 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1263 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1264 Token * peekToken() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1265 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1266 if ( token->next ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1267 return token->next; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1268 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1269 return & eof_tok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1270 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1271 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1272 void expectEnd() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1273 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1274 if ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1275 stmt->error ( "expected end of statement" ); // %% extra at end... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1276 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1277 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1278 void parse() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1279 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1280 op = parseOpcode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1281 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1282 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1283 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1284 case Op_Align: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1285 doAlign(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1286 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1287 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1288 case Op_Even: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1289 doEven(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1290 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1291 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1292 case Op_Naked: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1293 doNaked(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1294 expectEnd(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1295 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1296 case Op_Invalid: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1297 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1298 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1299 if ( op >= Op_db && op <= Op_de ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1300 doData(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1301 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1302 doInstruction(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1303 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1304 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1305 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1306 AsmOp parseOpcode() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1307 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1308 static const int N_ents = sizeof ( opData ) /sizeof ( AsmOpEnt ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1309 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1310 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1311 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1312 case TOKalign: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1313 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1314 return Op_Align; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1315 case TOKin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1316 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1317 opIdent = Id::___in; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1318 return Op_in; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1319 case TOKint32: // "int" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1320 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1321 opIdent = Id::__int; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1322 return Op_SrcImm; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1323 case TOKout: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1324 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1325 opIdent = Id::___out; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1326 return Op_out; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1327 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1328 // search for mnemonic below |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1329 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1330 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1331 stmt->error ( "expected opcode" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1332 return Op_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1333 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1334 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1335 opIdent = token->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1336 const char * opcode = token->ident->string; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1337 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1338 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1339 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1340 // %% okay to use bsearch? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1341 int i = 0, j = N_ents, k, l; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1342 do |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1343 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1344 k = ( i + j ) / 2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1345 l = strcmp ( opcode, opData[k].inMnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1346 if ( ! l ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1347 return opData[k].asmOp; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1348 else if ( l < 0 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1349 j = k; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1350 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1351 i = k + 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1352 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1353 while ( i != j ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1354 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1355 stmt->error ( "unknown opcode '%s'", opcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1356 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1357 return Op_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1358 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1359 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1360 // need clobber information.. use information is good too... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1361 void doInstruction() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1362 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1363 bool ok = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1364 unsigned operand_i = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1365 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1366 opInfo = & asmOpInfo[op]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1367 memset ( operands, 0, sizeof ( operands ) ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1368 |
1092
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1369 if ( token->value == TOKeof && (op == Op_FMath0 )) |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1370 { |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1371 for (operand_i = 0; operand_i < 0; operand_i++) |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1372 { |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1373 operand = & operands[operand_i]; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1374 operand->reg = operand->baseReg = operand->indexReg = |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1375 operand->segmentPrefix = Reg_Invalid; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1376 operand->cls = Opr_Reg; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1377 if (operand_i == 0) |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1378 { |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1379 operand->reg = Reg_ST; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1380 } |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1381 else |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1382 { |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1383 operand->reg = Reg_ST1; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1384 } |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1385 operand->hasNumber = 0; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1386 operand->constDisplacement = 0; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1387 parseOperand(); |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1388 |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1389 if ( matchOperands ( operand_i ) ) |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1390 { |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1391 AsmCode * asmcode = new AsmCode ( N_Regs ); |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1392 |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1393 if ( formatInstruction ( operand_i, asmcode ) ) |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1394 stmt->asmcode = ( code * ) asmcode; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1395 } |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1396 |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1397 } |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1398 return; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1399 } |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1400 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1401 while ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1402 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1403 if ( operand_i < Max_Operands ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1404 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1405 operand = & operands[operand_i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1406 operand->reg = operand->baseReg = operand->indexReg = |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1407 operand->segmentPrefix = Reg_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1408 parseOperand(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1409 operand_i++; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1410 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1411 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1412 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1413 ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1414 stmt->error ( "too many operands for instruction" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1415 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1416 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1417 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1418 if ( token->value == TOKcomma ) |
1084
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
1419 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1420 nextToken(); |
1084
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
1421 } |
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
1422 else if ( token->value == TOKint16 || token->value == TOKint32 ) |
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
1423 { |
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
1424 //throw away the 'short' in "jle short label;". Works for 'long' also. |
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
1425 operands[0] = operands[1]; |
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
1426 return; |
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
1427 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1428 else if ( token->value != TOKeof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1429 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1430 ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1431 stmt->error ( "expected comma after operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1432 return; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1433 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1434 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1435 // if (operand_i < opInfo->minOperands) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1436 // ok = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1437 // stmt->error("too few operands for instruction"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1438 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1439 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1440 if ( matchOperands ( operand_i ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1441 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1442 AsmCode * asmcode = new AsmCode ( N_Regs ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1443 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1444 if ( formatInstruction ( operand_i, asmcode ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1445 stmt->asmcode = ( code * ) asmcode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1446 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1447 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1448 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1449 void setAsmCode() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1450 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1451 AsmCode * asmcode = new AsmCode ( N_Regs ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1452 asmcode->insnTemplate = insnTemplate.str(); |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
1453 Logger::cout() << "insnTemplate = " << asmcode->insnTemplate << '\n'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1454 stmt->asmcode = ( code* ) asmcode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1455 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1456 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1457 // note: doesn't update AsmOp op |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1458 bool matchOperands ( unsigned nOperands ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1459 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1460 bool wrong_number = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1461 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1462 for ( unsigned i = 0; i < nOperands; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1463 classifyOperand ( & operands[i] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1464 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1465 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1466 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1467 if ( nOperands == opInfo->nOperands() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1468 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1469 wrong_number = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1470 /* Cases in which number of operands is not |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1471 enough for a match: Op_FCmp/Op_FCmp1, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1472 Op_FCmpP/Op_FCmpP1 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1473 for ( unsigned i = 0; i < nOperands; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1474 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1475 Operand * operand = & operands[i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1476 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1477 switch ( opInfo->operands[i] & Opr_ClassMask ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1478 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1479 case OprC_Mem: // no FPMem currently |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1480 if ( operand->cls != Opr_Mem ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1481 goto no_match; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1482 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1483 case OprC_RFP: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1484 if ( ! ( operand->reg >= Reg_ST && operand->reg <= Reg_ST7 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1485 goto no_match; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1486 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1487 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1488 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1489 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1490 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1491 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1492 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1493 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1494 no_match: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1495 if ( opInfo->linkType == Next_Form ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1496 opInfo = & asmOpInfo[ op = ( AsmOp ) opInfo->link ]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1497 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1498 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1499 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1500 if ( wrong_number ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1501 stmt->error ( "wrong number of operands" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1502 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1503 stmt->error ( "wrong operand types" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1504 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1505 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1506 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1507 void addOperand ( const char * fmt, AsmArgType type, Expression * e, AsmCode * asmcode, AsmArgMode mode = Mode_Input ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1508 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1509 if ( sc->func->naked ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1510 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1511 switch ( type ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1512 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1513 case Arg_Integer: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1514 if ( e->type->isunsigned() ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1515 insnTemplate << "$" << e->toUInteger(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1516 else |
1105
cdb7e1167803
- Fixed building tango-user-ldc on x86-32.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents:
1102
diff
changeset
|
1517 insnTemplate << "$" << (sinteger_t)e->toInteger(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1518 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1519 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1520 case Arg_Pointer: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1521 stmt->error ( "unsupported pointer reference to '%s' in naked asm", e->toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1522 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1523 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1524 case Arg_Memory: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1525 if ( e->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1526 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1527 VarExp* v = ( VarExp* ) e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1528 if ( VarDeclaration* vd = v->var->isVarDeclaration() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1529 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1530 if ( !vd->isDataseg() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1531 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1532 stmt->error ( "only global variables can be referenced by identifier in naked asm" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1533 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1534 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1535 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1536 // osx needs an extra underscore |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1537 if ( global.params.os == OSMacOSX ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1538 insnTemplate << "_"; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1539 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1540 // print out the mangle |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1541 insnTemplate << vd->mangle(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1542 vd->nakedUse = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1543 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1544 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1545 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1546 stmt->error ( "unsupported memory reference to '%s' in naked asm", e->toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1547 break; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1548 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1549 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1550 assert ( 0 && "asm unsupported arg" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1551 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1552 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1553 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1554 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1555 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1556 insnTemplate << fmt |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1557 << "<<" << (mode==Mode_Input ? "in" : "out") << asmcode->args.size() << ">>"; |
1101
8bf8b058944a
Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents:
1100
diff
changeset
|
1558 asmcode->args.push_back ( AsmArg ( type, e, mode ) ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1559 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1560 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1561 void addOperand2 ( const char * fmtpre, const char * fmtpost, AsmArgType type, Expression * e, AsmCode * asmcode, AsmArgMode mode = Mode_Input ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1562 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1563 assert ( !sc->func->naked ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1564 insnTemplate << fmtpre |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1565 << "<<" << (mode==Mode_Input ? "in" : "out") << ">>" |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1566 << fmtpost; |
1101
8bf8b058944a
Clean up asm code a bit.
Frits van Bommel <fvbommel wxs.nl>
parents:
1100
diff
changeset
|
1567 asmcode->args.push_back ( AsmArg ( type, e, mode ) ); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1568 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1569 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1570 void addLabel ( char* id ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1571 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1572 insnTemplate << sc->func->mangle() << "_" << id; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1573 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1574 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1575 /* Determines whether the operand is a register, memory reference |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1576 or immediate. Immediate addresses are currently classified as |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1577 memory. This function is called before the exact instructions |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1578 is known and thus, should not use opInfo. */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1579 void classifyOperand ( Operand * operand ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1580 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1581 operand->cls = classifyOperand1 ( operand ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1582 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1583 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1584 OperandClass classifyOperand1 ( Operand * operand ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1585 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1586 bool is_localsize = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1587 bool really_have_symbol = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1588 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1589 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1590 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1591 is_localsize = isLocalSize ( ( Expression * ) operand->symbolDisplacement.data[0] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1592 really_have_symbol = ! is_localsize; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1593 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1594 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1595 if ( operand->isOffset && ! operand->hasBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1596 return Opr_Immediate; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1597 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1598 if ( operand->hasBracket || really_have_symbol ) // %% redo for 'offset' function |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1599 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1600 if ( operand->reg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1601 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1602 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1603 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1604 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1605 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1606 return Opr_Mem; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1607 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1608 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1609 if ( operand->reg != Reg_Invalid && operand->constDisplacement != 0 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1610 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1611 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1612 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1613 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1614 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1615 if ( operand->segmentPrefix != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1616 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1617 if ( operand->reg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1618 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1619 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1620 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1621 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1622 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1623 return Opr_Mem; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1624 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1625 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1626 if ( operand->reg != Reg_Invalid && ! operand->hasNumber ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1627 return Opr_Reg; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1628 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1629 // should check immediate given (operand->hasNumber); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1630 // |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1631 if ( operand->hasNumber || is_localsize ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1632 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1633 // size determination not correct if there are symbols Opr_Immediate |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1634 if ( operand->dataSize == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1635 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1636 if ( operand->constDisplacement < 0x100 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1637 operand->dataSize = Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1638 else if ( operand->constDisplacement < 0x10000 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1639 operand->dataSize = Short_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1640 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1641 operand->dataSize = Int_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1642 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1643 return Opr_Immediate; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1644 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1645 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1646 // probably a bug,? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1647 stmt->error ( "invalid operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1648 return Opr_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1649 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1650 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1651 void writeReg ( Reg reg ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1652 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1653 insnTemplate << "%" << regInfo[reg].gccName; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1654 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1655 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1656 bool opTakesLabel() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1657 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1658 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1659 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1660 case Op_Branch: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1661 case Op_CBranch: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1662 case Op_Loop: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1663 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1664 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1665 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1666 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1667 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
1668 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1669 bool getTypeChar ( TypeNeeded needed, PtrType ptrtype, char & type_char ) |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1670 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1671 switch ( needed ) |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1672 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1673 case Byte_NoType: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1674 return ptrtype == Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1675 case Word_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1676 if ( ptrtype == Byte_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1677 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1678 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1679 case Int_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1680 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1681 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1682 case Byte_Ptr: type_char = 'b'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1683 case Short_Ptr: type_char = 'w'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1684 case Int_Ptr: type_char = 'l'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1685 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1686 // %% these may be too strict |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1687 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1688 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1689 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1690 case FPInt_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1691 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1692 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1693 case Short_Ptr: type_char = 0; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1694 case Int_Ptr: type_char = 'l'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1695 case QWord_Ptr: type_char = 'q'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1696 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1697 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1698 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1699 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1700 case FP_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1701 switch ( ptrtype ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1702 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1703 case Float_Ptr: type_char = 's'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1704 case Double_Ptr: type_char = 'l'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1705 case Extended_Ptr: type_char = 't'; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1706 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1707 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1708 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1709 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1710 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1711 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1712 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1713 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1714 } |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1715 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1716 // also set impl clobbers |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1717 bool formatInstruction ( int nOperands, AsmCode * asmcode ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1718 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1719 const char *fmt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1720 const char *mnemonic; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1721 char type_char = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1722 bool use_star; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1723 AsmArgMode mode; |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1724 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1725 insnTemplate.str(""); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1726 // %% todo: special case for something.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1727 if ( opInfo->linkType == Out_Mnemonic ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1728 mnemonic = alternateMnemonics[opInfo->link]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1729 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1730 mnemonic = opIdent->string; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1731 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1732 if ( opInfo->needsType ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1733 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1734 PtrType exact_type = Default_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1735 PtrType min_type = Default_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1736 PtrType hint_type = Default_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1737 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1738 /* Default types: This attempts to match the observed behavior of DMD */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1739 switch ( opInfo->needsType ) |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1740 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1741 case Int_Types: min_type = Byte_Ptr; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1742 case Word_Types: min_type = Short_Ptr; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1743 case FPInt_Types: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1744 if ( op == Op_Fis_ST ) // integer math instructions |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1745 min_type = Int_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1746 else // compare, load, store |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1747 min_type = Short_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1748 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1749 case FP_Types: min_type = Float_Ptr; break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1750 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1751 if ( op == Op_push && operands[0].cls == Opr_Immediate ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1752 min_type = Int_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1753 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1754 for ( int i = 0; i < nOperands; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1755 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1756 if ( hint_type == Default_Ptr && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1757 ! ( opInfo->operands[i] & Opr_NoType ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1758 hint_type = operands[i].dataSizeHint; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1759 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1760 if ( ( opInfo->operands[i] & Opr_NoType ) || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1761 operands[i].dataSize == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1762 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1763 if ( operands[i].cls == Opr_Immediate ) |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1764 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1765 min_type = operands[i].dataSize > min_type ? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1766 operands[i].dataSize : min_type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1767 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1768 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1769 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1770 exact_type = operands[i].dataSize; // could check for conflicting types |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1771 break; |
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1772 } |
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1773 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1774 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1775 bool type_ok; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1776 if ( exact_type == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1777 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1778 type_ok = getTypeChar ( ( TypeNeeded ) opInfo->needsType, hint_type, type_char ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1779 if ( ! type_ok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1780 type_ok = getTypeChar ( ( TypeNeeded ) opInfo->needsType, min_type, type_char ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1781 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1782 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1783 type_ok = getTypeChar ( ( TypeNeeded ) opInfo->needsType, exact_type, type_char ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1784 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1785 if ( ! type_ok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1786 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1787 stmt->error ( "invalid operand size" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1788 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1789 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1790 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1791 else if ( op == Op_Branch ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1792 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1793 if ( operands[0].dataSize == Far_Ptr ) // %% type=Far_Ptr not set by Seg:Ofss OTOH, we don't support that.. |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1794 insnTemplate << 'l'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1795 } |
1087
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1796 else if ( op == Op_fxch || op == Op_FfdRR_P || op == Op_FidR_P ) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1797 { |
1087
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1798 if ( operands[0].cls == Opr_Mem && op == Op_FidR_P ) |
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1799 { |
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1800 nOperands = 1; |
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1801 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1802 // gas won't accept the two-operand form |
1087
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1803 else if ( operands[1].cls == Opr_Reg && operands[1].reg == Reg_ST ) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1804 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1805 nOperands = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1806 } |
1087
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1807 else if ( operands[1].cls == Opr_Mem && operands[1].reg == Reg_ST || operands[0].cls == Opr_Mem ) |
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1808 { |
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1809 nOperands = 1; |
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1810 } |
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1811 else if ( operands[0].cls == Opr_Reg && (operands[0].reg == Reg_ST || operands[0].reg == Reg_ST1 )) |
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1812 { |
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1813 //fix previous update to allow single operand form of fstp |
b1d75bf46ffa
fix fistp properly for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1084
diff
changeset
|
1814 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1815 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1816 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1817 stmt->error ( "invalid operands" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1818 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1819 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1820 } |
1092
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1821 else if ( op == Op_FMath0 || op == Op_FdST0ST1 ) |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1822 { |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1823 operands[0].cls = Opr_Reg; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1824 operands[0].reg = Reg_ST; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1825 operands[1].cls = Opr_Reg; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1826 operands[1].reg = Reg_ST1; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1827 nOperands = 2; |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
1828 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1829 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1830 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1831 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1832 case Op_SizedStack: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1833 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1834 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1835 if ( mnemonic[mlen-1] == 'd' ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1836 insnTemplate.write(mnemonic, mlen-1); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1837 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1838 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1839 insnTemplate << mnemonic << 'w'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1840 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1841 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1842 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1843 case Op_cmpsd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1844 case Op_insX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1845 case Op_lodsX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1846 case Op_movsd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1847 case Op_outsX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1848 case Op_scasX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1849 case Op_stosX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1850 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1851 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1852 if ( mnemonic[mlen-1] == 'd' ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1853 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1854 insnTemplate.write(mnemonic, mlen-1) << 'l'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1855 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1856 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1857 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1858 insnTemplate << mnemonic; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1859 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1860 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1861 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1862 case Op_movsx: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1863 case Op_movzx: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1864 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1865 char tc_1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1866 int mlen = strlen ( mnemonic ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1867 PtrType op1_size = operands[1].dataSize; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1868 if ( op1_size == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1869 op1_size = operands[1].dataSizeHint; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1870 // Need type char for source arg |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1871 switch ( op1_size ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1872 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1873 case Byte_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1874 case Default_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1875 tc_1 = 'b'; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1876 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1877 case Short_Ptr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1878 tc_1 = 'w'; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1879 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1880 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1881 stmt->error ( "invalid operand size/type" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1882 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1883 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1884 assert ( type_char != 0 ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1885 insnTemplate.write(mnemonic, mlen-1) << tc_1 << type_char; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1886 } |
920
545f54041d91
Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :)
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
871
diff
changeset
|
1887 break; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1888 default: |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1889 insnTemplate << mnemonic; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1890 if ( type_char ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1891 insnTemplate << type_char; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1892 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1893 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1894 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1895 switch ( opInfo->implicitClobbers & Clb_DXAX_Mask ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1896 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1897 case Clb_SizeAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1898 case Clb_EAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1899 asmcode->regs[Reg_EAX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1900 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1901 case Clb_SizeDXAX: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1902 asmcode->regs[Reg_EAX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1903 if ( type_char != 'b' ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1904 asmcode->regs[Reg_EDX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1905 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1906 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1907 // nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1908 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1909 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1910 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1911 if ( opInfo->implicitClobbers & Clb_DI ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1912 asmcode->regs[Reg_EDI] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1913 if ( opInfo->implicitClobbers & Clb_SI ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1914 asmcode->regs[Reg_ESI] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1915 if ( opInfo->implicitClobbers & Clb_CX ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1916 asmcode->regs[Reg_ECX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1917 if ( opInfo->implicitClobbers & Clb_SP ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1918 asmcode->regs[Reg_ESP] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1919 if ( opInfo->implicitClobbers & Clb_ST ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1920 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1921 /* Can't figure out how to tell GCC that an |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1922 asm statement leaves an arg pushed on the stack. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1923 Maybe if the statment had and input or output |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1924 operand it would work... In any case, clobbering |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1925 all FP prevents incorrect code generation. */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1926 asmcode->regs[Reg_ST] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1927 asmcode->regs[Reg_ST1] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1928 asmcode->regs[Reg_ST2] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1929 asmcode->regs[Reg_ST3] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1930 asmcode->regs[Reg_ST4] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1931 asmcode->regs[Reg_ST5] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1932 asmcode->regs[Reg_ST6] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1933 asmcode->regs[Reg_ST7] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1934 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1935 if ( opInfo->implicitClobbers & Clb_Flags ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1936 asmcode->regs[Reg_EFLAGS] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1937 if ( op == Op_cpuid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1938 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1939 asmcode->regs[Reg_EAX] = true; |
1095
d6bd818212de
Add missing EBX clobber to CPUID asm instruction.
Frits van Bommel <fvbommel wxs.nl>
parents:
1094
diff
changeset
|
1940 asmcode->regs[Reg_EBX] = true; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1941 asmcode->regs[Reg_ECX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1942 asmcode->regs[Reg_EDX] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1943 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1944 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1945 insnTemplate << ' '; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1946 for ( int i__ = 0; i__ < nOperands; i__++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1947 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1948 int i; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1949 if ( i__ != 0 ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1950 insnTemplate << ", "; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1951 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1952 fmt = "$"; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1953 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1954 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1955 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1956 case Op_mul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1957 // gas won't accept the two-operand form; skip to the source operand |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1958 i__ = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1959 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1960 case Op_bound: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1961 case Op_enter: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1962 i = i__; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1963 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1964 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1965 i = nOperands - 1 - i__; // operand = & operands[ nOperands - 1 - i ]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1966 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1967 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1968 operand = & operands[ i ]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1969 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1970 switch ( operand->cls ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1971 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1972 case Opr_Immediate: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1973 // for implementing offset: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1974 // $var + $7 // fails |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1975 // $var + 7 // ok |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1976 // $7 + $var // ok |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1977 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1978 // DMD doesn't seem to allow this |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1979 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1980 if (opInfo->takesLabel()) tho... (near ptr <Number> would be abs?) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1981 fmt = "$a"; // GAS won't accept "jmp $42"; must be "jmp 42" (rel) or "jmp *42" (abs) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1982 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1983 if ( opTakesLabel() /*opInfo->takesLabel()*/ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1984 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1985 // "relative addressing not allowed in branch instructions" .. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1986 stmt->error ( "integer constant not allowed in branch instructions" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1987 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1988 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1989 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1990 if ( operand->symbolDisplacement.dim && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1991 isLocalSize ( ( Expression * ) operand->symbolDisplacement.data[0] ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1992 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1993 // handle __LOCAL_SIZE, which in this constant, is an immediate |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1994 // should do this in slotexp.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1995 addOperand ( "$", Arg_LocalSize, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1996 ( Expression * ) operand->symbolDisplacement.data[0], asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1997 if ( operand->constDisplacement ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
1998 insnTemplate << '+'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
1999 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2000 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2001 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2002 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2003 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2004 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2005 fmt = "$a"; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2006 addOperand ( "$", Arg_Pointer, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2007 ( Expression * ) operand->symbolDisplacement.data[0], |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2008 asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2009 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2010 if ( operand->constDisplacement ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2011 insnTemplate << '+'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2012 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2013 // skip the addOperand(fmt, Arg_Integer...) below |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2014 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2015 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2016 addOperand ( fmt, Arg_Integer, newIntExp ( operand->constDisplacement ), asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2017 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2018 case Opr_Reg: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2019 if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2020 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2021 Reg clbr_reg = ( Reg ) regInfo[operand->reg].baseReg; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2022 if ( clbr_reg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2023 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2024 asmcode->regs[clbr_reg] = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2025 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2026 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2027 if ( opTakesLabel() /*opInfo->takesLabel()*/ ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2028 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2029 writeReg ( operand->reg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2030 /* |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2031 insnTemplate << "%"; |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2032 insnTemplate << regInfo[operand->reg].name; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2033 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2034 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2035 case Opr_Mem: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2036 // better: use output operands for simple variable references |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2037 if ( ( opInfo->operands[i] & Opr_Update ) == Opr_Update ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2038 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2039 mode = Mode_Update; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2040 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2041 else if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2042 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2043 mode = Mode_Output; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2044 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2045 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2046 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2047 mode = Mode_Input; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2048 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2049 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2050 use_star = opTakesLabel();//opInfo->takesLabel(); |
1094
fa20521cbb13
Change faulty offset for asm in Cache.d (ie. change "-20(%rbp)+4)" to
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1092
diff
changeset
|
2051 |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2052 if (Logger::enabled()) { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2053 Logger::cout() << "Opr_Mem\n"; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2054 LOG_SCOPE |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2055 Logger::cout() << "baseReg: " << operand->baseReg << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2056 Logger::cout() << "segmentPrefix: " << operand->segmentPrefix << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2057 Logger::cout() << "constDisplacement: " << operand->constDisplacement << '\n'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2058 for (int i = 0; i < operand->symbolDisplacement.dim; i++) { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2059 Expression* expr = (Expression*) operand->symbolDisplacement.data[i]; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2060 Logger::cout() << "symbolDisplacement[" << i << "] = " << expr->toChars() << '\n'; |
1097
4450834402e2
Fix FS:4 problem for x32
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1095
diff
changeset
|
2061 } |
1094
fa20521cbb13
Change faulty offset for asm in Cache.d (ie. change "-20(%rbp)+4)" to
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1092
diff
changeset
|
2062 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2063 if ( operand->segmentPrefix != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2064 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2065 writeReg ( operand->segmentPrefix ); |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2066 insnTemplate << ':'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2067 } |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2068 if ( (operand->segmentPrefix != Reg_Invalid && operand->symbolDisplacement.dim == 0) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2069 || operand->constDisplacement ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2070 { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2071 insnTemplate << operand->constDisplacement; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2072 if ( operand->symbolDisplacement.dim ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2073 { |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2074 insnTemplate << '+'; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2075 } |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2076 operand->constDisplacement = 0; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2077 //addOperand(fmt, Arg_Integer, newIntExp(operand->constDisplacement), asmcode); |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2078 if ( opInfo->operands[i] & Opr_Dest ) |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2079 asmcode->clobbersMemory = 1; |
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2080 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2081 if ( operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2082 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2083 Expression * e = ( Expression * ) operand->symbolDisplacement.data[0]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2084 Declaration * decl = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2085 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2086 if ( e->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2087 decl = ( ( VarExp * ) e )->var; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2088 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2089 if ( operand->baseReg != Reg_Invalid && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2090 decl && ! decl->isDataseg() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2091 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2092 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2093 // 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
|
2094 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2095 /* GCC doesn't give the front end access to stack offsets |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2096 when optimization is turned on (3.x) or at all (4.x). |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2097 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2098 Try to convert var[EBP] (or var[ESP] for naked funcs) to |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2099 a memory expression that does not require us to know |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2100 the stack offset. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2101 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2102 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2103 if ( operand->indexReg == Reg_Invalid && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2104 decl->isVarDeclaration() && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2105 ( ( operand->baseReg == Reg_EBP && ! sc->func->naked ) || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2106 ( operand->baseReg == Reg_ESP && sc->func->naked ) ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2107 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2108 |
1055
5066ba0c9783
Apply [1053] to x86-32 asm as well.
Frits van Bommel <fvbommel wxs.nl>
parents:
944
diff
changeset
|
2109 e = new AddrExp ( 0, e ); |
5066ba0c9783
Apply [1053] to x86-32 asm as well.
Frits van Bommel <fvbommel wxs.nl>
parents:
944
diff
changeset
|
2110 e->type = decl->type->pointerTo(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2111 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2112 #if !IN_LLVM |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2113 /* DMD uses the same frame offsets for naked functions. */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2114 if ( sc->func->naked ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2115 operand->constDisplacement += 4; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2116 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2117 if ( operand->constDisplacement ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2118 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2119 e = new AddExp ( 0, e, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2120 new IntegerExp ( 0, operand->constDisplacement, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2121 Type::tint32 ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2122 e->type = decl->type->pointerTo(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2123 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2124 e = new PtrExp ( 0, e ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2125 e->type = decl->type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2126 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2127 operand->constDisplacement = 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2128 operand->baseReg = Reg_Invalid; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2129 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2130 addOperand ( fmt, Arg_Memory, e, asmcode, mode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2131 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2132 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2133 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2134 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2135 // FIXME: what is this ? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2136 addOperand2 ( "${",":a}", Arg_FrameRelative, e, asmcode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2137 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2138 if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2139 asmcode->clobbersMemory = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2140 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2141 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2142 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2143 // Plain memory reference to variable |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2144 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2145 /* If in a reg, DMD moves to memory.. even with -O, so we'll do the same |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2146 by always using the "m" contraint. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2147 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2148 In order to get the correct output for function and label symbols, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2149 the %an format must be used with the "p" constraint. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2150 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2151 if ( isDollar ( e ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2152 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2153 error ( "dollar labels are not supported", stmt->loc.toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2154 asmcode->dollarLabel = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2155 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2156 else if ( e->op == TOKdsymbol ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2157 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2158 LabelDsymbol * lbl = ( LabelDsymbol * ) ( ( DsymbolExp * ) e )->s; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2159 stmt->isBranchToLabel = lbl->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2160 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2161 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2162 addLabel ( lbl->ident->toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2163 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2164 else if ( ( decl && decl->isCodeseg() ) ) // if function or label |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2165 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2166 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2167 // simply write out the mangle |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2168 // on osx, prepend extra _ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2169 if ( global.params.os == OSMacOSX ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2170 insnTemplate << "_"; |
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2171 insnTemplate << decl->mangle(); |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2172 // addOperand2("${", ":c}", Arg_Pointer, e, asmcode); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2173 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2174 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2175 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2176 if ( use_star ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2177 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2178 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2179 use_star = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2180 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2181 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2182 if ( !sc->func->naked ) // no addrexp in naked asm please :) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2183 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2184 Type* tt = e->type->pointerTo(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2185 e = new AddrExp ( 0, e ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2186 e->type = tt; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2187 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2188 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2189 addOperand ( fmt, Arg_Memory, e, asmcode, mode ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2190 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2191 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2192 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2193 if ( use_star ) |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2194 insnTemplate << '*'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2195 if ( operand->baseReg != Reg_Invalid || operand->indexReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2196 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2197 insnTemplate << '('; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2198 if ( operand->baseReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2199 writeReg ( operand->baseReg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2200 if ( operand->indexReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2201 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2202 insnTemplate << ','; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2203 writeReg ( operand->indexReg ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2204 if ( operand->scale ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2205 { |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2206 insnTemplate << "," << operand->scale; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2207 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2208 } |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2209 insnTemplate << ')'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2210 if ( opInfo->operands[i] & Opr_Dest ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2211 asmcode->clobbersMemory = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2212 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2213 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2214 case Opr_Invalid: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2215 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2216 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2217 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2218 |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2219 asmcode->insnTemplate = insnTemplate.str(); |
1109
97d80437cb80
Fix field access from inline asm. See tests/mini/asm10.d
Frits van Bommel <fvbommel wxs.nl>
parents:
1106
diff
changeset
|
2220 Logger::cout() << "insnTemplate = " << asmcode->insnTemplate << '\n'; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2221 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2222 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2223 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2224 bool isIntExp ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2225 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2226 if ( exp->op == TOKint64 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2227 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2228 if ( exp->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2229 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2230 Declaration * v = ( ( VarExp * ) exp )->var; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2231 if ( v->isConst() && v->type->isintegral() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2232 return 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2233 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2234 return 0; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2235 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2236 bool isRegExp ( Expression * exp ) { return exp->op == TOKmod; } // ewww.%% |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2237 bool isLocalSize ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2238 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2239 // cleanup: make a static var |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2240 return exp->op == TOKidentifier && ( ( IdentifierExp * ) exp )->ident == Id::__LOCAL_SIZE; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2241 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2242 bool isDollar ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2243 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2244 return exp->op == TOKidentifier && ( ( IdentifierExp * ) exp )->ident == Id::__dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2245 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2246 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2247 Expression * newRegExp ( int regno ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2248 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2249 IntegerExp * e = new IntegerExp ( regno ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2250 e->op = TOKmod; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2251 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2252 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2253 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2254 Expression * newIntExp ( int v /* %% type */ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2255 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2256 // Only handles 32-bit numbers as this is IA-32. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2257 return new IntegerExp ( stmt->loc, v, Type::tint32 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2258 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2259 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2260 void slotExp ( Expression * exp ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2261 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2262 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2263 if offset, make a note |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2264 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2265 if integer, add to immediate |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2266 if reg: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2267 if not in bracket, set reg (else error) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2268 if in bracket: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2269 if not base, set base |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2270 if not index, set index |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2271 else, error |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2272 if symbol: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2273 set symbol field |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2274 */ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2275 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2276 bool is_offset = false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2277 if ( exp->op == TOKaddress ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2278 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2279 exp = ( ( AddrExp * ) exp )->e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2280 is_offset = true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2281 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2282 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2283 if ( isIntExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2284 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2285 if ( is_offset ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2286 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2287 operand->constDisplacement += exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2288 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2289 operand->hasNumber = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2290 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2291 else if ( isRegExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2292 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2293 if ( is_offset ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2294 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2295 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2296 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2297 if ( operand->reg == Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2298 operand->reg = ( Reg ) exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2299 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2300 stmt->error ( "too many registers in operand (use brackets)" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2301 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2302 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2303 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2304 if ( operand->baseReg == Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2305 operand->baseReg = ( Reg ) exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2306 else if ( operand->indexReg == Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2307 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2308 operand->indexReg = ( Reg ) exp->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2309 operand->scale = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2310 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2311 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2312 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2313 stmt->error ( "too many registers memory operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2314 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2315 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2316 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2317 else if ( exp->op == TOKvar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2318 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2319 VarDeclaration * v = ( ( VarExp * ) exp )->var->isVarDeclaration(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2320 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2321 if ( v && v->storage_class & STCfield ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2322 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2323 operand->constDisplacement += v->offset; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2324 if ( ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2325 operand->hasNumber = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2326 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2327 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2328 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2329 if ( v && v->type->isscalar() ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2330 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2331 // DMD doesn't check Tcomplex*, and counts Tcomplex32 as Tfloat64 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2332 TY ty = v->type->toBasetype()->ty; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2333 operand->dataSizeHint = ty == Tfloat80 || ty == Timaginary80 ? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2334 Extended_Ptr : ( PtrType ) v->type->size ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2335 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2336 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2337 if ( ! operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2338 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2339 if ( is_offset && ! operand->inBracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2340 operand->isOffset = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2341 operand->symbolDisplacement.push ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2342 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2343 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2344 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2345 stmt->error ( "too many symbols in operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2346 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2347 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2348 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2349 else if ( exp->op == TOKidentifier || exp->op == TOKdsymbol ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2350 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2351 // %% localsize could be treated as a simple constant.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2352 // change to addSymbolDisp(e) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2353 if ( ! operand->symbolDisplacement.dim ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2354 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2355 operand->symbolDisplacement.push ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2356 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2357 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2358 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2359 stmt->error ( "too many symbols in operand" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2360 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2361 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2362 else if ( exp == Handled ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2363 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2364 // nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2365 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2366 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2367 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2368 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
|
2369 } |
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
|
2370 } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2371 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2372 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
|
2373 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2374 // %% report operand number |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2375 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
|
2376 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2377 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2378 Expression * intOp ( TOK op, Expression * e1, Expression * e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2379 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2380 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2381 if ( isIntExp ( e1 ) && ( ! e2 || isIntExp ( e2 ) ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2382 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2383 switch ( op ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2384 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2385 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2386 if ( e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2387 e = new AddExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2388 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2389 e = e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2390 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2391 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2392 if ( e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2393 e = new MinExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2394 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2395 e = new NegExp ( stmt->loc, e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2396 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2397 case TOKmul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2398 e = new MulExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2399 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2400 case TOKdiv: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2401 e = new DivExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2402 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2403 case TOKmod: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2404 e = new ModExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2405 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2406 case TOKshl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2407 e = new ShlExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2408 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2409 case TOKshr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2410 e = new ShrExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2411 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2412 case TOKushr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2413 e = new UshrExp ( stmt->loc, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2414 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2415 case TOKnot: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2416 e = new NotExp ( stmt->loc, e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2417 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2418 case TOKtilde: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2419 e = new ComExp ( stmt->loc, e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2420 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2421 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2422 assert ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2423 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2424 e = e->semantic ( sc ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2425 return e->optimize ( WANTvalue | WANTinterpret ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2426 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2427 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2428 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2429 stmt->error ( "expected integer operand(s) for '%s'", Token::tochars[op] ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2430 return newIntExp ( 0 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2431 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2432 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2433 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2434 void parseOperand() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2435 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2436 Expression * exp = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2437 slotExp ( exp ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2438 if ( isRegExp ( exp ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2439 operand->dataSize = ( PtrType ) regInfo[exp->toInteger() ].size; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2440 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2441 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2442 Expression * parseAsmExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2443 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2444 return parseShiftExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2445 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2446 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2447 Expression * parseShiftExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2448 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2449 Expression * e1 = parseAddExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2450 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2451 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2452 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2453 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2454 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2455 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2456 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2457 case TOKshl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2458 case TOKshr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2459 case TOKushr: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2460 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2461 e2 = parseAddExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2462 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2463 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2464 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2465 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2466 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2467 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2468 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2469 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2470 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2471 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2472 Expression * parseAddExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2473 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2474 Expression * e1 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2475 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2476 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2477 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2478 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2479 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2480 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2481 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2482 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2483 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2484 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2485 if ( isIntExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2486 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2487 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2488 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2489 slotExp ( e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2490 slotExp ( e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2491 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2492 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2493 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2494 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2495 // Note: no support for symbol address difference |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2496 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2497 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2498 if ( isIntExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2499 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2500 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2501 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2502 slotExp ( e1 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2503 e2 = intOp ( TOKmin, e2, NULL ); // verifies e2 is an int |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2504 slotExp ( e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2505 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2506 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2507 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2508 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2509 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2510 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2511 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2512 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2513 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2514 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2515 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2516 bool tryScale ( Expression * e1, Expression * e2 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2517 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2518 Expression * et; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2519 if ( isIntExp ( e1 ) && isRegExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2520 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2521 et = e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2522 e1 = e2; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2523 e2 = et; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2524 goto do_scale; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2525 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2526 else if ( isRegExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2527 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2528 do_scale: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2529 if ( ! operand->inBracket ) |
221
68687d8c3e9a
[svn r237] some inline asm output now seems to work, see tangotests/asm2.d
lindquist
parents:
220
diff
changeset
|
2530 { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2531 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
|
2532 } |
222
251548c1035d
[svn r238] use *m for memory input constraints and pass in their address
ChristianK
parents:
221
diff
changeset
|
2533 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2534 if ( operand->scale || operand->indexReg != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2535 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2536 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2537 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2538 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2539 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2540 operand->indexReg = ( Reg ) e1->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2541 operand->scale = e2->toInteger(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2542 switch ( operand->scale ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2543 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2544 case 1: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2545 case 2: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2546 case 4: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2547 case 8: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2548 // ok; do nothing |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2549 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2550 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2551 stmt->error ( "invalid index register scale '%d'", operand->scale ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2552 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2553 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2554 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2555 return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2556 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2557 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2558 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2559 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2560 Expression * parseMultExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2561 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2562 Expression * e1 = parseBrExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2563 Expression * e2; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2564 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2565 while ( 1 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2566 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2567 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2568 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2569 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2570 case TOKmul: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2571 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2572 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2573 if ( isIntExp ( e1 ) && isIntExp ( e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2574 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2575 else if ( tryScale ( e1,e2 ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2576 e1 = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2577 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2578 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2579 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2580 case TOKdiv: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2581 case TOKmod: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2582 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2583 e2 = parseMultExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2584 e1 = intOp ( tv, e1, e2 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2585 continue; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2586 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2587 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2588 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2589 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2590 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2591 return e1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2592 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2593 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2594 Expression * parseBrExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2595 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2596 // %% check (why is bracket lower precends..) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2597 // 3+4[eax] -> 3 + (4 [EAX]) .. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2598 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2599 // only one bracked allowed, so this doesn't quite handle |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2600 // the spec'd syntax |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2601 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2602 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2603 if ( token->value == TOKlbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2604 e = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2605 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2606 e = parseUnaExp(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2607 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2608 // DMD allows multiple bracket expressions. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2609 while ( token->value == TOKlbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2610 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2611 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2612 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2613 operand->inBracket = operand->hasBracket = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2614 slotExp ( parseAsmExp() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2615 operand->inBracket = 0; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2616 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2617 if ( token->value == TOKrbracket ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2618 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2619 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2620 stmt->error ( "missing ']'" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2621 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2622 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2623 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2624 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2625 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2626 PtrType isPtrType ( Token * tok ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2627 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2628 switch ( tok->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2629 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2630 case TOKint8: return Byte_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2631 case TOKint16: return Short_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2632 case TOKint32: return Int_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2633 // 'long ptr' isn't accepted? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2634 case TOKfloat32: return Float_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2635 case TOKfloat64: return Double_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2636 case TOKfloat80: return Extended_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2637 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2638 for ( int i = 0; i < N_PtrNames; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2639 if ( tok->ident == ptrTypeIdentTable[i] ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2640 return ptrTypeValueTable[i]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2641 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2642 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2643 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2644 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2645 return Default_Ptr; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2646 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2647 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2648 Expression * parseUnaExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2649 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2650 Expression * e = NULL; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2651 PtrType ptr_type; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2652 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2653 // First, check for type prefix. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2654 if ( token->value != TOKeof && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2655 peekToken()->value == TOKidentifier && |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2656 peekToken()->ident == Id::ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2657 { |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2658 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2659 ptr_type = isPtrType ( token ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2660 if ( ptr_type != Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2661 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2662 if ( operand->dataSize == Default_Ptr ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2663 operand->dataSize = ptr_type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2664 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2665 stmt->error ( "multiple specifications of operand size" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2666 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2667 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2668 stmt->error ( "unknown operand size '%s'", token->toChars() ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2669 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2670 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2671 return parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2672 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2673 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2674 TOK tv = token->value; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2675 switch ( tv ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2676 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2677 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2678 if ( token->ident == ident_seg ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2679 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2680 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2681 stmt->error ( "'seg' not supported" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2682 e = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2683 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2684 else if ( token->ident == Id::offset || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2685 token->ident == Id::offsetof ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2686 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2687 if ( token->ident == Id::offset && ! global.params.useDeprecated ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2688 stmt->error ( "offset deprecated, use offsetof" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2689 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2690 e = parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2691 e = new AddrExp ( stmt->loc, e ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2692 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2693 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2694 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2695 // primary exp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2696 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2697 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2698 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2699 case TOKadd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2700 case TOKmin: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2701 case TOKnot: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2702 case TOKtilde: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2703 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2704 e = parseUnaExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2705 return intOp ( tv, e, NULL ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2706 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2707 // primary exp |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2708 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2709 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2710 return parsePrimaryExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2711 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2712 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2713 Expression * parsePrimaryExp() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2714 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2715 Expression * e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2716 Identifier * ident = NULL; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2717 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2718 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2719 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2720 case TOKint32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2721 case TOKuns32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2722 case TOKint64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2723 case TOKuns64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2724 // semantic here? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2725 // %% for tok64 really should use 64bit type |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2726 e = new IntegerExp ( stmt->loc, token->uns64value, Type::tint32 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2727 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2728 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2729 case TOKfloat32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2730 case TOKfloat64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2731 case TOKfloat80v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2732 // %% need different types? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2733 e = new RealExp ( stmt->loc, token->float80value, Type::tfloat80 ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2734 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2735 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2736 case TOKidentifier: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2737 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2738 ident = token->ident; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2739 nextToken(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2740 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2741 if ( ident == Id::__LOCAL_SIZE ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2742 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2743 return new IdentifierExp ( stmt->loc, ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2744 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2745 else if ( ident == Id::__dollar ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2746 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2747 do_dollar: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2748 return new IdentifierExp ( stmt->loc, ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2749 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2750 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2751 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2752 e = new IdentifierExp ( stmt->loc, ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2753 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2754 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2755 // If this is more than one component ref, it gets complicated: *(&Field + n) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2756 // maybe just do one step at a time.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2757 // simple case is Type.f -> VarDecl(field) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2758 // actually, DMD only supports on level... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2759 // X.y+Y.z[EBX] is supported, tho.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2760 // %% doesn't handle properties (check%%) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2761 while ( token->value == TOKdot ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2762 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2763 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2764 if ( token->value == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2765 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2766 e = new DotIdExp ( stmt->loc, e, token->ident ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2767 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2768 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2769 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2770 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2771 stmt->error ( "expected identifier" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2772 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2773 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2774 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2775 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2776 // check for reg first then dotexp is an error? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2777 if ( e->op == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2778 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2779 for ( int i = 0; i < N_Regs; i++ ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2780 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2781 if ( ident == regInfo[i].ident ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2782 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2783 if ( ( Reg ) i == Reg_ST && token->value == TOKlparen ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2784 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2785 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2786 switch ( token->value ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2787 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2788 case TOKint32v: case TOKuns32v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2789 case TOKint64v: case TOKuns64v: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2790 if ( token->uns64value < 8 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2791 e = newRegExp ( ( Reg ) ( Reg_ST + token->uns64value ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2792 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2793 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2794 stmt->error ( "invalid floating point register index" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2795 e = Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2796 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2797 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2798 if ( token->value == TOKrparen ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2799 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2800 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2801 stmt->error ( "expected ')'" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2802 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2803 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2804 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2805 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2806 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2807 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2808 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2809 else if ( token->value == TOKcolon ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2810 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2811 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2812 if ( operand->segmentPrefix != Reg_Invalid ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2813 stmt->error ( "too many segment prefixes" ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2814 else if ( i >= Reg_CS && i <= Reg_GS ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2815 operand->segmentPrefix = ( Reg ) i; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2816 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2817 stmt->error ( "'%s' is not a segment register", ident->string ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2818 return parseAsmExp(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2819 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2820 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2821 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2822 return newRegExp ( ( Reg ) i ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2823 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2824 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2825 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2826 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2827 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2828 if ( opTakesLabel() /*opInfo->takesLabel()*/ && e->op == TOKidentifier ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2829 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2830 // DMD uses labels secondarily to other symbols, so check |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2831 // if IdentifierExp::semantic won't find anything. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2832 Dsymbol *scopesym; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2833 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2834 if ( ! sc->search ( stmt->loc, ident, & scopesym ) ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2835 return new DsymbolExp ( stmt->loc, |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2836 sc->func->searchLabel ( ident ) ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2837 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2838 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2839 e = e->semantic ( sc ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2840 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2841 // Special case for floating point constant declarations. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2842 if ( e->op == TOKfloat64 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2843 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2844 Dsymbol * sym = sc->search ( stmt->loc, ident, NULL ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2845 if ( sym ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2846 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2847 VarDeclaration *v = sym->isVarDeclaration(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2848 if ( v ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2849 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2850 Expression *ve = new VarExp ( stmt->loc, v ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2851 ve->type = e->type; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2852 e = ve; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2853 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2854 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2855 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2856 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2857 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2858 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2859 case TOKdollar: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2860 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2861 ident = Id::__dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2862 goto do_dollar; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2863 break; |
1084
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
2864 case TOKint16: |
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
2865 case TOKint32: |
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
2866 //This if for the 'short' in "jle short Label;" |
56e56b3b9bb8
Fix 32bit version of "jle short Label;" for 'short' or 'long'.
notroot@ubuntu.localdomain
parents:
1057
diff
changeset
|
2867 return Handled; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2868 default: |
1092
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
2869 if ( op == Op_FMath0 || op == Op_FdST0ST1 || op == Op_FMath ) |
e6fadb6e6bdd
Fix for x32 fmul/div/add/sub with no operands.
Kelly Wilson <wilsonk cpsc.ucalgary.ca>
parents:
1087
diff
changeset
|
2870 return Handled; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2871 invalidExpression(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2872 return Handled; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2873 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2874 return e; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2875 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2876 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2877 void doAlign() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2878 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2879 // .align bits vs. bytes... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2880 // 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
|
2881 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2882 // parse primary: DMD allows 'MyAlign' (const int) but not '2+2' |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2883 // GAS is padding with NOPs last time I checked. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2884 Expression * e = parseAsmExp()->optimize ( WANTvalue | WANTinterpret ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2885 uinteger_t align = e->toUInteger(); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2886 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2887 if ( ( align & ( align - 1 ) ) == 0 ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2888 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2889 //FIXME: This printf is not portable. The use of `align` varies from system to system; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2890 // on i386 using a.out, .align `n` will align on a 2^`n` boundary instead of an `n` boundary |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2891 #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
|
2892 insnTemplate << ".balign\t" << align; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2893 #else |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2894 insnTemplate << ".align\t" << align; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2895 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2896 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2897 else |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2898 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2899 stmt->error ( "alignment must be a power of 2, not %u", ( unsigned ) align ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2900 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2901 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2902 setAsmCode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2903 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2904 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2905 void doEven() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2906 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2907 // .align for GAS is in bits, others probably use bytes.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2908 #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
|
2909 insnTemplate << ".align\t2"; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2910 #else |
1102
ae950bd712d3
Use stringstream in asm generation instead of OutBuffer.
Frits van Bommel <fvbommel wxs.nl>
parents:
1101
diff
changeset
|
2911 insnTemplate << ".align\t2"; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2912 #endif |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2913 setAsmCode(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2914 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2915 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2916 void doNaked() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2917 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2918 // %% can we assume sc->func != 0? |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2919 sc->func->naked = 1; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2920 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2921 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2922 void doData() |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2923 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2924 static const char * directives[] = { ".byte", ".short", ".long", ".long", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2925 "", "", "" |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2926 }; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2927 // FIXME |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2928 /* |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2929 machine_mode mode; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2930 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2931 insnTemplate->writestring((char*) directives[op - Op_db]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2932 insnTemplate->writebyte(' '); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2933 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2934 do { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2935 // DMD is pretty strict here, not even constant expressions are allowed.. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2936 switch (op) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2937 case Op_db: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2938 case Op_ds: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2939 case Op_di: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2940 case Op_dl: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2941 if (token->value == TOKint32v || token->value == TOKuns32v || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2942 token->value == TOKint64v || token->value == TOKuns64v) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2943 // As per usual with GNU, assume at least 32-bit host |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2944 if (op != Op_dl) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2945 insnTemplate->printf("%u", (d_uns32) token->uns64value); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2946 else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2947 // Output two .longS. GAS has .quad, but would have to rely on 'L' format .. |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2948 // just need to use HOST_WIDE_INT_PRINT_DEC |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2949 insnTemplate->printf("%u,%u", |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2950 (d_uns32) token->uns64value, (d_uns32) (token->uns64value >> 32)); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2951 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2952 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2953 stmt->error("expected integer constant"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2954 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2955 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2956 case Op_df: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2957 mode = SFmode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2958 goto do_float; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2959 case Op_dd: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2960 mode = DFmode; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2961 goto do_float; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2962 case Op_de: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2963 #ifndef TARGET_80387 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2964 #define XFmode TFmode |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2965 #endif |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2966 mode = XFmode; // not TFmode |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2967 // drop through |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2968 do_float: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2969 if (token->value == TOKfloat32v || token->value == TOKfloat64v || |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2970 token->value == TOKfloat80v) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2971 long words[3]; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2972 real_to_target(words, & token->float80value.rv(), mode); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2973 // don't use directives..., just use .long like GCC |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2974 insnTemplate->printf(".long\t%u", words[0]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2975 if (mode != SFmode) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2976 insnTemplate->printf(",%u", words[1]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2977 // DMD outputs 10 bytes, so we need to switch to .short here |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2978 if (mode == XFmode) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2979 insnTemplate->printf("\n\t.short\t%u", words[2]); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2980 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2981 stmt->error("expected float constant"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2982 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2983 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2984 default: |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2985 abort(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2986 } |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
2987 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2988 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2989 if (token->value == TOKcomma) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2990 insnTemplate->writebyte(','); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2991 nextToken(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2992 } else if (token->value == TOKeof) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2993 break; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2994 } else { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2995 stmt->error("expected comma"); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2996 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2997 } while (1); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2998 |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
2999 setAsmCode();*/ |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3000 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3001 }; |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3002 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3003 #if D_GCC_VER < 40 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3004 // 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
|
3005 // be modified accordingly. |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3006 #undef XEXP |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3007 #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
|
3008 #endif |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3009 |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3010 // FIXME |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3011 #define HOST_WIDE_INT long |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3012 bool getFrameRelativeValue ( LLValue* decl, HOST_WIDE_INT * result ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3013 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3014 assert ( 0 ); |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3015 // FIXME |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3016 // // 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
|
3017 // // 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
|
3018 // // 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
|
3019 // rtx r = DECL_INCOMING_RTL(decl); |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3020 // rtx e1, e2; |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3021 // |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3022 // // Local variables don't have DECL_INCOMING_RTL |
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3023 // if (r == NULL_RTX) |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3024 // r = DECL_RTL(decl); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3025 // |
219
761c8352f494
[svn r235] rough port of GDC's inline assembler code, unfinished
ChristianK
parents:
diff
changeset
|
3026 // if (r != NULL_RTX && GET_CODE(r) == MEM /* && r->frame_related */ ) { |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3027 // r = XEXP(r, 0); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3028 // if (GET_CODE(r) == PLUS) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3029 // e1 = XEXP(r, 0); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3030 // e2 = XEXP(r, 1); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3031 // if (e1 == virtual_incoming_args_rtx && GET_CODE(e2) == CONST_INT) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3032 // *result = INTVAL(e2) + 8; // %% 8 is 32-bit specific... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3033 // return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3034 // } else if (e1 == virtual_stack_vars_rtx && GET_CODE(e2) == CONST_INT) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3035 // *result = INTVAL(e2); // %% 8 is 32-bit specific... |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3036 // return true; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3037 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3038 // } else if (r == virtual_incoming_args_rtx) { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3039 // *result = 8; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3040 // return true; // %% same as above |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3041 // } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3042 // // 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
|
3043 // } |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3044 // |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3045 return false; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3046 } |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3047 |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3048 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3049 struct AsmParser : public AsmParserCommon |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3050 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3051 virtual void run ( Scope* sc, AsmStatement* asmst ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3052 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3053 AsmProcessor ap ( sc, asmst ); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3054 ap.run(); |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3055 } |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3056 |
944
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3057 virtual std::string getRegName ( int i ) |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3058 { |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3059 return regInfo[i].gccName; |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3060 } |
eb310635d80e
Fixed accessing function symbols from inline asm.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
924
diff
changeset
|
3061 }; |
756
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3062 |
a58784e0f035
Merge wilsonk's x86-64 inline assembly.
Christian Kamm <kamm incasoftware de>
parents:
751
diff
changeset
|
3063 } |