Chad Rosier
bd7fdadb90
[ms-inline asm] Add $$ before numeric constants in the IR.
...
llvm-svn: 163581
2012-09-11 00:51:28 +00:00
Chad Rosier
46b0a0adbe
[ms-inline asm] Output empty asm statements for the directives we don't
...
handle. Otherwise, the AsmParser will explode if we try to generate an
object files.
llvm-svn: 163345
2012-09-06 19:56:25 +00:00
Chad Rosier
c05d2c908d
[ms-inline asm] The IR representation of inline assembly enumerates the input
...
and output expressions much like that in GNU-style inline assembly. Output
expressions are first. Do this for MS-style inline asms.
llvm-svn: 163342
2012-09-06 19:35:00 +00:00
Chad Rosier
7cf5a44836
Update for r163231.
...
llvm-svn: 163232
2012-09-05 19:01:07 +00:00
Chad Rosier
5aee94d4ee
[ms-inline asm] Update test case for r163181.
...
llvm-svn: 163182
2012-09-05 00:08:54 +00:00
Chad Rosier
85fff2ac11
[ms-inline asm] Remove the Inline Asm Non-Standard Dialect attribute. This
...
implementation does not co-exist well with how the sideeffect and alignstack
attributes are handled.
llvm-svn: 163173
2012-09-04 22:23:54 +00:00
Chad Rosier
dea7964ddb
[ms-inline asm] The MCInstrDesc only tracks register definitions. For now,
...
assume that if the 1st operands is an expression and the instruction mayStore,
then it is a memory definition.
llvm-svn: 163144
2012-09-04 16:39:38 +00:00
Chad Rosier
41b739517c
Fix test case for Release builds.
...
llvm-svn: 162800
2012-08-28 22:22:54 +00:00
Chad Rosier
649dfc317d
[ms-inline asm] Have MSAsmStmts use the generic EmitAsmStmt codegen function.
...
llvm-svn: 162796
2012-08-28 21:11:24 +00:00
Chad Rosier
d997bd1422
[ms-inline asm] Start sending non-simple inline asms to the AsmParser.
...
The parser still can't handle all cases, so fall back to emitting a simple
MSAsmStmt if we get into trouble.
llvm-svn: 162382
2012-08-22 19:18:30 +00:00
Chad Rosier
b84cc6cfa3
[ms-inline asm] Remove this test case and the associated special case code.
...
llvm-svn: 162288
2012-08-21 17:01:26 +00:00
Chad Rosier
3d4b98b4bc
[ms-inline asm] Add a helper function, isMSAsmKeyword().
...
These require special handling, which we don't currently handle. This is being
put in place to ensure we don't do invalid symbol table lookups or try to parse
invalid assembly. The test cases just makes sure the latter isn't happening.
llvm-svn: 162050
2012-08-16 22:25:38 +00:00
Chad Rosier
8efa48dddb
Fixup test case for Release builds.
...
llvm-svn: 162038
2012-08-16 18:47:29 +00:00
Chad Rosier
592b90a476
[ms-inline asm] Start tracking which tokens are registers and which are
...
variables, function or label references. The former is a potential clobber.
The latter is either an input or an output. Unfortunately, it's difficult to
test this patch at the moment, but the added test case will eventually do so.
llvm-svn: 162026
2012-08-16 17:10:59 +00:00
Chad Rosier
b32f3d5230
[ms-inline asm] Use a set container to remove redundant clobbers.
...
llvm-svn: 161991
2012-08-15 21:55:19 +00:00
Chad Rosier
aa7c1cb5f8
[ms-inline asm] MSVC parses multiple __asm statements on a single line as one
...
statement. For example,
if (x)
__asm out dx, ax __asm out dx, ax
results in a single inline asm statement (i.e., both "out dx, ax" statements are
predicated on if(x)).
llvm-svn: 161986
2012-08-15 21:03:27 +00:00
Chad Rosier
73e325de55
[ms-inline asm] Add support for clobbers in CodeGen.
...
This is a reapplication of r161914 now that the scoping issue has been resolved
in r161966.
llvm-svn: 161967
2012-08-15 18:12:36 +00:00
Eric Christopher
d9401e2e58
Revert this to try to bring the i386 bots back.
...
llvm-svn: 161931
2012-08-15 06:31:06 +00:00
Chad Rosier
2d5d1327c4
[ms-inline asm] Add support for clobbers in CodeGen.
...
llvm-svn: 161914
2012-08-15 00:43:09 +00:00
Chad Rosier
a078a5e405
[ms-inline asm] More test cases to make sure buildMSAsmString() doesn't regress.
...
llvm-svn: 161908
2012-08-14 23:48:41 +00:00
Chad Rosier
c97a6bbfd8
[ms-inline asm] Add a helpful assert.
...
llvm-svn: 161890
2012-08-14 19:22:06 +00:00
Chad Rosier
65a8e0b69f
[ms-inline asm] Have patchMSAsmStrings() return a vector or AsmStrings.
...
The AsmParser expects a single asm instruction, but valid ms-style inline asm
statements may contain multiple instructions.
This happens with asm blocks
__asm {
mov ebx, eax
mov ecx, ebx
}
or when multiple asm statements are adjacent to one another
__asm mov ebx, eax
__asm mov ecx, ebx
and
__asm mov ebx, eax __asm mov ecx, ebx
Currently, asm blocks are not properly handled.
llvm-svn: 161780
2012-08-13 20:32:07 +00:00
Chad Rosier
1426a81a74
[ms-inline asm] Use the new Inline Asm Non-Standard Dialect attribute.
...
llvm-svn: 161642
2012-08-10 00:00:34 +00:00
Chad Rosier
360e1763d5
[ms-inline asm] Add basic codegen support for simple asm stmts. Currently,
...
only machine specific clobbers are modeled.
llvm-svn: 161524
2012-08-08 21:15:52 +00:00
Chad Rosier
83916498b8
[ms-inline asm] Add a very simple test case. Basically, we're only testing for
...
crashers at the moment (and coincidentally this case was causing a crash).
llvm-svn: 161520
2012-08-08 20:37:31 +00:00