AArch64: add 'a' inline asm operand modifier

This is used in the Linux kernel, and effectively just means "print an
address".

llvm-svn: 193593
This commit is contained in:
Tim Northover 2013-10-29 08:22:33 +00:00
parent 7c3ba222e0
commit d29ddf6713
2 changed files with 11 additions and 0 deletions

View File

@ -230,6 +230,8 @@ bool AArch64AsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNum,
// Output bits 23:12 of symbolic address with appropriate :hi12: relocation
// modifier (currently only for TLS local exec).
return printSymbolicAddress(MI->getOperand(OpNum), true, "hi12", O);
case 'a':
return PrintAsmMemoryOperand(MI, OpNum, AsmVariant, ExtraCode, O);
}

View File

@ -107,3 +107,12 @@ define void @test_inline_modifier_c() nounwind {
ret void
}
define void @test_inline_modifier_a() nounwind {
; CHECK-LABEL: test_inline_modifier_a:
call void asm sideeffect "prfm pldl1keep, ${0:a}", "r"(i32* @var_simple)
; CHECK: adrp [[VARHI:x[0-9]+]], var_simple
; CHECK: add x[[VARADDR:[0-9]+]], [[VARHI]], #:lo12:var_simple
; CHECK: prfm pldl1keep, [x[[VARADDR]]]
ret void
}