Skip to content

Commit e290d6d

Browse files
atrosinenkoakiramenai
authored andcommitted
[EraVM][AsmParser] Migrate to new asm syntax
1 parent 0123300 commit e290d6d

File tree

92 files changed

+1750
-1660
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+1750
-1660
lines changed

lld/test/ELF/eravm-binary-layout.s

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
; RUN: llvm-objdump --no-leading-addr --disassemble-all --disassemble-zeroes --reloc --syms %t | FileCheck --check-prefix=OUTPUT-HASH %s
77

88
.text
9-
nop stack+=[2 + r0]
9+
incsp 2
1010
add code[@glob_initializer], r0, stack[@glob]
1111

1212
.globl get_glob
@@ -16,11 +16,11 @@ get_glob:
1616
ret
1717

1818
DEFAULT_UNWIND:
19-
ret.panic.to_label @DEFAULT_UNWIND
19+
pncl @DEFAULT_UNWIND
2020
DEFAULT_FAR_RETURN:
21-
ret.ok.to_label r1, @DEFAULT_FAR_RETURN
21+
retl r1, @DEFAULT_FAR_RETURN
2222
DEFAULT_FAR_REVERT:
23-
ret.revert.to_label r1, @DEFAULT_FAR_REVERT
23+
revl r1, @DEFAULT_FAR_REVERT
2424

2525
.data
2626
.globl glob ; @glob
@@ -45,7 +45,7 @@ glob_initializer:
4545
; OUTPUT-NEXT: 00000010 g .code 00000000 get_glob
4646
; OUTPUT-EMPTY:
4747
; OUTPUT-LABEL: <.code>:
48-
; OUTPUT-NEXT: 00 02 00 00 00 00 00 02 nop stack+=[2 + r0]
48+
; OUTPUT-NEXT: 00 02 00 00 00 00 00 02 incsp 2
4949
; OUTPUT-NEXT: 00 00 00 02 00 00 00 47 add code[2], r0, stack[r0]
5050
; OUTPUT-EMPTY:
5151
; OUTPUT-NEXT: <get_glob>:
@@ -54,13 +54,13 @@ glob_initializer:
5454
; OUTPUT-NEXT: 00 00 00 00 00 01 04 2d ret
5555
; OUTPUT-EMPTY:
5656
; OUTPUT-NEXT: <DEFAULT_UNWIND>:
57-
; OUTPUT-NEXT: 00 00 00 05 00 00 04 32 ret.panic.to_label 5
57+
; OUTPUT-NEXT: 00 00 00 05 00 00 04 32 pncl 5
5858
; OUTPUT-EMPTY:
5959
; OUTPUT-NEXT: <DEFAULT_FAR_RETURN>:
60-
; OUTPUT-NEXT: 00 00 00 06 00 01 04 2e ret.ok.to_label r1, 6
60+
; OUTPUT-NEXT: 00 00 00 06 00 01 04 2e retl 6
6161
; OUTPUT-EMPTY:
6262
; OUTPUT-NEXT: <DEFAULT_FAR_REVERT>:
63-
; OUTPUT-NEXT: 00 00 00 07 00 01 04 30 ret.revert.to_label r1, 7
63+
; OUTPUT-NEXT: 00 00 00 07 00 01 04 30 revl 7
6464
; OUTPUT-EMPTY:
6565
; OUTPUT-NEXT: <glob_initializer>:
6666
; OUTPUT-NEXT: 00 00 00 00 00 00 00 00

lld/test/ELF/eravm-code-reloc.s

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -66,51 +66,51 @@ foo_local:
6666
.type caller_g,@function
6767
.globl caller_g
6868
caller_g:
69-
near_call r1, @foo, @handler
70-
far_call r3, r4, @foo
69+
call r1, @foo, @handler
70+
callf r3, r4, @foo
7171
add @.OUTLINED_FUNCTION_RET0, r0, stack-[1]
7272
jump @foo_local
7373
.OUTLINED_FUNCTION_RET0:
7474
jump @label
75-
ret.ok.to_label r1, @label
76-
ret.revert.to_label r1, @label
77-
ret.panic.to_label @label
75+
retl r1, @label
76+
revl r1, @label
77+
pncl @label
7878
.globl label
7979
label:
8080
jump code[@jump_table + 1]
8181
ret
8282
; INPUT-LABEL: <caller_g>:
83-
; INPUT-NEXT: 00 00 00 00 00 01 04 0f near_call r1, 0, 0
83+
; INPUT-NEXT: 00 00 00 00 00 01 04 0f call r1, 0, 0
8484
; INPUT-NEXT: R_ERAVM_16_SCALE_8 handler
8585
; INPUT-NEXT: R_ERAVM_16_SCALE_8 foo
86-
; INPUT-NEXT: 00 00 00 00 00 43 04 21 far_call r3, r4, 0
86+
; INPUT-NEXT: 00 00 00 00 00 43 04 21 callf r3, r4, 0
8787
; INPUT-NEXT: R_ERAVM_16_SCALE_8 foo
8888
; INPUT-NEXT: 00 01 00 00 00 00 00 3d add 0, r0, stack-[1 + r0]
8989
; INPUT-NEXT: R_ERAVM_16_SCALE_8 .text+0x40
9090
; INPUT-NEXT: 00 00 00 00 00 00 01 3d jump 0
9191
; INPUT-NEXT: R_ERAVM_16_SCALE_8 .text+0x18
9292
; INPUT-NEXT: 00 00 00 00 00 00 01 3d jump 0
9393
; INPUT-NEXT: R_ERAVM_16_SCALE_8 label
94-
; INPUT-NEXT: 00 00 00 00 00 01 04 2e ret.ok.to_label r1, 0
94+
; INPUT-NEXT: 00 00 00 00 00 01 04 2e retl 0
9595
; INPUT-NEXT: R_ERAVM_16_SCALE_8 label
96-
; INPUT-NEXT: 00 00 00 00 00 01 04 30 ret.revert.to_label r1, 0
96+
; INPUT-NEXT: 00 00 00 00 00 01 04 30 revl 0
9797
; INPUT-NEXT: R_ERAVM_16_SCALE_8 label
98-
; INPUT-NEXT: 00 00 00 00 00 00 04 32 ret.panic.to_label 0
98+
; INPUT-NEXT: 00 00 00 00 00 00 04 32 pncl 0
9999
; INPUT-NEXT: R_ERAVM_16_SCALE_8 label
100100
; INPUT-LABEL: <label>:
101101
; INPUT-NEXT: 00 00 00 01 00 00 01 3e jump code[1]
102102
; INPUT-NEXT: R_ERAVM_16_SCALE_32 jump_table
103103
; INPUT-NEXT: 00 00 00 00 00 01 04 2d ret
104104

105105
; OUTPUT-LABEL: <caller_g>:
106-
; OUTPUT-NEXT: 00 12 00 13 00 01 04 0f near_call r1, 19, 18
107-
; OUTPUT-NEXT: 00 00 00 13 00 43 04 21 far_call r3, r4, 19
106+
; OUTPUT-NEXT: 00 12 00 13 00 01 04 0f call r1, 19, 18
107+
; OUTPUT-NEXT: 00 00 00 13 00 43 04 21 callf r3, r4, 19
108108
; OUTPUT-NEXT: 00 01 00 18 00 00 00 3d add 24, r0, stack-[1 + r0]
109109
; OUTPUT-NEXT: 00 00 00 13 00 00 01 3d jump 19
110110
; OUTPUT-NEXT: 00 00 00 1c 00 00 01 3d jump 28
111-
; OUTPUT-NEXT: 00 00 00 1c 00 01 04 2e ret.ok.to_label r1, 28
112-
; OUTPUT-NEXT: 00 00 00 1c 00 01 04 30 ret.revert.to_label r1, 28
113-
; OUTPUT-NEXT: 00 00 00 1c 00 00 04 32 ret.panic.to_label 28
111+
; OUTPUT-NEXT: 00 00 00 1c 00 01 04 2e retl 28
112+
; OUTPUT-NEXT: 00 00 00 1c 00 01 04 30 revl 28
113+
; OUTPUT-NEXT: 00 00 00 1c 00 00 04 32 pncl 28
114114
; OUTPUT-LABEL: <label>:
115115
; OUTPUT-NEXT: 00 00 00 02 00 00 01 3e jump code[2]
116116
; OUTPUT-NEXT: 00 00 00 00 00 01 04 2d ret
@@ -119,43 +119,43 @@ label:
119119
.type caller_l,@function
120120
.globl caller_l
121121
caller_l:
122-
near_call r1, @foo_local, @handler_local
123-
far_call r3, r4, @foo_local
122+
call r1, @foo_local, @handler_local
123+
callf r3, r4, @foo_local
124124
jump @label_local
125-
ret.ok.to_label r1, @label_local
126-
ret.revert.to_label r1, @label_local
127-
ret.panic.to_label @label_local
125+
retl r1, @label_local
126+
revl r1, @label_local
127+
pncl @label_local
128128
.local label_local
129129
label_local:
130130
jump code[@jump_table_local + 1]
131131
ret
132132

133133
; INPUT-LABEL: <caller_l>:
134-
; INPUT-NEXT: 00 00 00 00 00 01 04 0f near_call r1, 0, 0
134+
; INPUT-NEXT: 00 00 00 00 00 01 04 0f call r1, 0, 0
135135
; INPUT-NEXT: R_ERAVM_16_SCALE_8 .text+0x10
136136
; INPUT-NEXT: R_ERAVM_16_SCALE_8 .text+0x18
137-
; INPUT-NEXT: 00 00 00 00 00 43 04 21 far_call r3, r4, 0
137+
; INPUT-NEXT: 00 00 00 00 00 43 04 21 callf r3, r4, 0
138138
; INPUT-NEXT: R_ERAVM_16_SCALE_8 .text+0x18
139139
; INPUT-NEXT: 00 00 00 00 00 00 01 3d jump 0
140140
; INPUT-NEXT: R_ERAVM_16_SCALE_8 .text+0xa0
141-
; INPUT-NEXT: 00 00 00 00 00 01 04 2e ret.ok.to_label r1, 0
141+
; INPUT-NEXT: 00 00 00 00 00 01 04 2e retl 0
142142
; INPUT-NEXT: R_ERAVM_16_SCALE_8 .text+0xa0
143-
; INPUT-NEXT: 00 00 00 00 00 01 04 30 ret.revert.to_label r1, 0
143+
; INPUT-NEXT: 00 00 00 00 00 01 04 30 revl 0
144144
; INPUT-NEXT: R_ERAVM_16_SCALE_8 .text+0xa0
145-
; INPUT-NEXT: 00 00 00 00 00 00 04 32 ret.panic.to_label 0
145+
; INPUT-NEXT: 00 00 00 00 00 00 04 32 pncl 0
146146
; INPUT-NEXT: R_ERAVM_16_SCALE_8 .text+0xa0
147147
; INPUT-LABEL: <label_local>:
148148
; INPUT-NEXT: 00 00 00 01 00 00 01 3e jump code[1]
149149
; INPUT-NEXT: R_ERAVM_16_SCALE_32 .rodata+0x20
150150
; INPUT-NEXT: 00 00 00 00 00 01 04 2d ret
151151

152152
; OUTPUT-LABEL: <caller_l>:
153-
; OUTPUT-NEXT: 00 12 00 13 00 01 04 0f near_call r1, 19, 18
154-
; OUTPUT-NEXT: 00 00 00 13 00 43 04 21 far_call r3, r4, 19
153+
; OUTPUT-NEXT: 00 12 00 13 00 01 04 0f call r1, 19, 18
154+
; OUTPUT-NEXT: 00 00 00 13 00 43 04 21 callf r3, r4, 19
155155
; OUTPUT-NEXT: 00 00 00 24 00 00 01 3d jump 36
156-
; OUTPUT-NEXT: 00 00 00 24 00 01 04 2e ret.ok.to_label r1, 36
157-
; OUTPUT-NEXT: 00 00 00 24 00 01 04 30 ret.revert.to_label r1, 36
158-
; OUTPUT-NEXT: 00 00 00 24 00 00 04 32 ret.panic.to_label 36
156+
; OUTPUT-NEXT: 00 00 00 24 00 01 04 2e retl 36
157+
; OUTPUT-NEXT: 00 00 00 24 00 01 04 30 revl 36
158+
; OUTPUT-NEXT: 00 00 00 24 00 00 04 32 pncl 36
159159
; OUTPUT-LABEL: <label_local>:
160160
; OUTPUT-NEXT: 00 00 00 02 00 00 01 3e jump code[2]
161161
; OUTPUT-NEXT: 00 00 00 00 00 01 04 2d ret

llvm/lib/Target/EraVM/AsmParser/EraVMAsmParser.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ class EraVMAsmParser : public MCTargetAsmParser {
7272
ParseStatus tryParseStackOperand(OperandVector &Operands);
7373
ParseStatus tryParseCodeOperand(OperandVector &Operands);
7474

75+
bool parseAdjSP(OperandVector &Operands);
76+
7577
bool ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
7678
SMLoc NameLoc, OperandVector &Operands) override;
7779

@@ -682,6 +684,36 @@ ParseStatus EraVMAsmParser::tryParseCodeOperand(OperandVector &Operands) {
682684
return ParseStatus::Success;
683685
}
684686

687+
bool EraVMAsmParser::parseAdjSP(OperandVector &Operands) {
688+
SMLoc S, E;
689+
MCRegister Reg;
690+
int Addend = 0;
691+
692+
while (!parseOptionalToken(AsmToken::EndOfStatement)) {
693+
switch (getTok().getKind()) {
694+
default:
695+
return TokError("unexpected token");
696+
case AsmToken::Identifier:
697+
if (!tryParseRegister(Reg, S, E).isSuccess())
698+
return Error(getTok().getLoc(), "cannot parse register");
699+
Operands.push_back(EraVMOperand::CreateReg(Reg, S, E));
700+
break;
701+
case AsmToken::Plus:
702+
Operands.push_back(EraVMOperand::CreateToken("+", getTok().getLoc()));
703+
Lex(); // eat "+" token
704+
break;
705+
case AsmToken::Integer:
706+
Addend = getTok().getIntVal();
707+
S = getTok().getLoc();
708+
E = getTok().getEndLoc();
709+
Operands.push_back(EraVMOperand::CreateImm(createConstant(Addend), S, E));
710+
Lex(); // eat integer token
711+
break;
712+
}
713+
}
714+
return false;
715+
}
716+
685717
bool EraVMAsmParser::ParseInstruction(ParseInstructionInfo &Info,
686718
StringRef Name, SMLoc NameLoc,
687719
OperandVector &Operands) {
@@ -690,6 +722,10 @@ bool EraVMAsmParser::ParseInstruction(ParseInstructionInfo &Info,
690722

691723
StringRef Mnemonic = static_cast<EraVMOperand &>(*Operands[0]).getToken();
692724
applyMnemonicAliases(Mnemonic, getAvailableFeatures(), /*VariantID=*/0);
725+
726+
if (Mnemonic == "incsp" || Mnemonic == "decsp")
727+
return parseAdjSP(Operands);
728+
693729
auto ParseOne = [this, Mnemonic, &Operands]() {
694730
return parseOperand(Mnemonic, Operands);
695731
};

llvm/lib/Target/EraVM/EraVMAsmPrinter.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,8 @@ void EraVMAsmPrinter::emitDefaultLandingPads() {
347347

348348
// Creates instruction:
349349
//
350-
// nop stack+=[StackSize + r0]
350+
// incsp StackSize
351+
//
351352
static MCInst createIncSPInst(int64_t StackSize) {
352353
assert(StackSize >= 0);
353354
MCInst MCI;

llvm/lib/Target/EraVM/EraVMInstrFormats.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -767,8 +767,8 @@ class IFarCall<EraVMOpcode opcode,
767767

768768
string Modifiers =
769769
!cond(!eq({is_static, is_shard}, {0, 0}): "",
770-
!eq({is_static, is_shard}, {1, 0}): ".static",
771-
!eq({is_static, is_shard}, {0, 1}): ".shard",
770+
!eq({is_static, is_shard}, {1, 0}): ".st",
771+
!eq({is_static, is_shard}, {0, 1}): ".sh",
772772
!eq({is_static, is_shard}, {1, 1}): ".st.sh",
773773
true: ".INVALID");
774774
let AsmString = !strconcat(opcode.Name, Modifiers, "${cc}", "\t", asmstr);

llvm/lib/Target/EraVM/EraVMInstrInfo.td

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -401,9 +401,15 @@ def NOPsrs : Isr_s<OpNoOp, NoSwap, PreserveFlags, []>;
401401

402402
def : Pat<(EraVMadd_to_sp GR256:$reg), (NOPrrs R0, R0, R0, $reg, 0, 0)>;
403403

404-
def : InstAlias<"nop${cc}\t${dst0}", (NOPrrs R0, R0, stackout:$dst0, pred:$cc)>;
405-
def : InstAlias<"nop${cc}\t${src0}", (NOPsrr R0, stackin:$src0, R0, pred:$cc)>;
406-
def : InstAlias<"nop${cc}", (NOPrrr R0, R0, R0, pred:$cc)>;
404+
def : InstAlias<"incsp${cc}\t${reg}", (NOPrrs R0, R0, R0, GR256:$reg, 0, pred:$cc)>;
405+
def : InstAlias<"incsp${cc}\t${imm}", (NOPrrs R0, R0, R0, R0, i16imm:$imm, pred:$cc)>;
406+
def : InstAlias<"incsp${cc}\t${reg}+${imm}", (NOPrrs R0, R0, R0, GR256:$reg, i16imm:$imm, pred:$cc)>;
407+
408+
def : InstAlias<"decsp${cc}\t${reg}", (NOPsrr R0, R0, GR256:$reg, 0, R0, pred:$cc)>;
409+
def : InstAlias<"decsp${cc}\t${imm}", (NOPsrr R0, R0, R0, i16imm:$imm, R0, pred:$cc)>;
410+
def : InstAlias<"decsp${cc}\t${reg}+${imm}", (NOPsrr R0, R0, GR256:$reg, i16imm:$imm, R0, pred:$cc)>;
411+
412+
def : InstAlias<"nop${cc}", (NOPrrr R0, R0, R0, pred:$cc)>;
407413

408414
// Note that while technically commutative arithmetic instructions are not swappable,
409415
// it is not a problem as there will be no corresponding instruction defined with SwapOperand = 1
@@ -945,13 +951,10 @@ def THROW : Pseudo<(outs), (ins GR256:$rs0, pred:$cc), [(EraVMthrow GR256:$rs0)]
945951
PseudoInstExpansion<(REVERTr GR256:$rs0, pred:$cc)>;
946952

947953
def : InstAlias<"ret${cc}", (RETr R1, pred:$cc)>;
948-
def : InstAlias<"revert${cc}", (REVERTr R1, pred:$cc)>;
954+
def : InstAlias<"rev${cc}", (REVERTr R1, pred:$cc)>;
949955

950-
// TODO Make these aliases preferred for printing after switching to the new syntax.
951-
let EmitPriority = 0 in {
952-
def : InstAlias<"ret.ok.to_label${cc} $dest", (RETrl R1, jmptarget:$dest, pred:$cc)>;
953-
def : InstAlias<"ret.revert.to_label${cc} $dest", (REVERTrl R1, jmptarget:$dest, pred:$cc)>;
954-
}
956+
def : InstAlias<"retl${cc} $dest", (RETrl R1, jmptarget:$dest, pred:$cc)>;
957+
def : InstAlias<"revl${cc} $dest", (REVERTrl R1, jmptarget:$dest, pred:$cc)>;
955958

956959
def : Pat<(EraVMreturn GR256:$rs0), (RETrl GR256:$rs0, (default_far_return 0))>;
957960
def : Pat<(EraVMrevert GR256:$rs0), (REVERTrl GR256:$rs0, (default_far_revert 0))>;
@@ -1034,7 +1037,7 @@ let Defs = [R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, Fl
10341037

10351038
// Unfortunately, we cannot encode @DEFAULT_UNWIND_DEST here, so we have to alias to pseudo
10361039
def NEAR_CALL_default_unwind : AsmParserPseudo<(outs), (ins GR256:$in1, jmptarget:$callee),
1037-
"near_call", "${in1} ${callee}">;
1040+
"call", "${in1} ${callee}">;
10381041

10391042
defm FAR_CALL : FarCallInst<OpFarcall>;
10401043
defm DELEGATE_CALL : FarCallInst<OpDelegate>;
@@ -1049,7 +1052,7 @@ foreach Op = [OpFarcall, OpDelegate, OpMimic] in {
10491052
!strconcat(Op.Name, ".st.sh")>;
10501053
}
10511054

1052-
def : InstAlias<"near_call${cc} ${callee}",
1055+
def : InstAlias<"call${cc} ${callee}",
10531056
(NEAR_CALL_default_unwind R0, jmptarget:$callee, pred:$cc)>;
10541057

10551058
def : Pat<(EraVMfarcall bb:$unwind), (FAR_CALLrrl R1, R2, bb:$unwind)>;

0 commit comments

Comments
 (0)