mirror of
https://github.com/vortexgpgpu/vortex.git
synced 2025-04-23 13:27:29 -04:00
%ra, %sp, %fp are now valid register identifiers.
This commit is contained in:
parent
60f2e494e3
commit
3242ff3354
4 changed files with 23 additions and 4 deletions
|
@ -5,7 +5,7 @@ namespace HarpTools {
|
|||
ASM_T_DIR_GLOBAL, ASM_T_DIR_ARG_NUM, ASM_T_DIR_ARG_STRING,
|
||||
ASM_T_DIR_ARG_SYM, ASM_T_DIR_ARG_R, ASM_T_DIR_ARG_W, ASM_T_DIR_ARG_X,
|
||||
ASM_T_DIR_END, ASM_T_LABEL, ASM_T_PRED, ASM_T_INST,
|
||||
ASM_T_PREG, ASM_T_REG, ASM_T_LIT, ASM_T_SYM,
|
||||
ASM_T_PEXP
|
||||
ASM_T_PREG, ASM_T_REG, ASM_T_REG_RA, ASM_T_REG_SP,
|
||||
ASM_T_REG_FP, ASM_T_LIT, ASM_T_SYM, ASM_T_PEXP
|
||||
};
|
||||
};
|
||||
|
|
|
@ -169,10 +169,11 @@ namespace Harp {
|
|||
|
||||
class AsmReader : public ObjReader {
|
||||
public:
|
||||
AsmReader(ArchDef arch) : wordSize(arch.getWordSize()) {}
|
||||
AsmReader(ArchDef arch) :
|
||||
wordSize(arch.getWordSize()), nRegs(arch.getNRegs()) {}
|
||||
virtual Obj *read(std::istream &input);
|
||||
private:
|
||||
Size wordSize;
|
||||
Size wordSize, nRegs;
|
||||
};
|
||||
|
||||
class HOFReader : public ObjReader {
|
||||
|
|
14
src/obj.cpp
14
src/obj.cpp
|
@ -363,7 +363,21 @@ Obj *AsmReader::read(std::istream &input) {
|
|||
default: asmReaderError(yyline, "Unexpected predicate register");
|
||||
}
|
||||
break;
|
||||
|
||||
case ASM_T_REG_RA:
|
||||
yylval.u = nRegs - 1;
|
||||
goto continue_reg;
|
||||
|
||||
case ASM_T_REG_FP:
|
||||
yylval.u = nRegs - 3;
|
||||
goto continue_reg;
|
||||
|
||||
case ASM_T_REG_SP:
|
||||
yylval.u = nRegs - 2;
|
||||
goto continue_reg;
|
||||
|
||||
case ASM_T_REG:
|
||||
continue_reg:
|
||||
switch (state) {
|
||||
case ST_INST1: curInst->setDestReg(yylval.u);
|
||||
state = ST_INST2;
|
||||
|
|
|
@ -91,6 +91,10 @@ to
|
|||
return ASM_T_PREG; }
|
||||
<INSTARGS>%r{num}{space}[,;]? { yylval.u = read_number(YYText());
|
||||
return ASM_T_REG; }
|
||||
<INSTARGS>%ra { return ASM_T_REG_RA; }
|
||||
<INSTARGS>%sp { return ASM_T_REG_FP; }
|
||||
<INSTARGS>%fp { return ASM_T_REG_SP; }
|
||||
|
||||
<INSTARGS>#{num}{space}[,;]? { yylval.u = read_number(YYText());
|
||||
return ASM_T_LIT; }
|
||||
<INSTARGS>{sym} { yylval.s = std::string(YYText()); return ASM_T_SYM; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue