mirror of
https://github.com/RRZE-HPC/OSACA.git
synced 2026-01-04 18:20:09 +01:00
enabled indexing without shape and lane for vector regs
This commit is contained in:
@@ -132,8 +132,8 @@ class ParserAArch64(BaseParser):
|
||||
pp.Literal(".")
|
||||
+ pp.Optional(pp.Word("12468")).setResultsName("lanes")
|
||||
+ pp.Word(pp.alphas, exact=1).setResultsName("shape")
|
||||
+ pp.Optional(index)
|
||||
)
|
||||
+ pp.Optional(index)
|
||||
)
|
||||
predicate = (
|
||||
pp.CaselessLiteral("p").setResultsName("prefix")
|
||||
@@ -510,15 +510,12 @@ class ParserAArch64(BaseParser):
|
||||
|
||||
def get_full_reg_name(self, register):
|
||||
"""Return one register name string including all attributes"""
|
||||
if "lanes" in register:
|
||||
return (
|
||||
register["prefix"]
|
||||
+ str(register["name"])
|
||||
+ "."
|
||||
+ str(register["lanes"])
|
||||
+ register["shape"]
|
||||
)
|
||||
return register["prefix"] + str(register["name"])
|
||||
name = register["prefix"] + str(register["name"])
|
||||
if "shape" in register:
|
||||
name += "." + str(register.get("lanes", "")) + register["shape"]
|
||||
if "index" in register:
|
||||
name += "[" + register["index"] + "]"
|
||||
return name
|
||||
|
||||
def normalize_imd(self, imd):
|
||||
"""Normalize immediate to decimal based representation"""
|
||||
|
||||
@@ -81,6 +81,7 @@ class TestParserAArch64(unittest.TestCase):
|
||||
instr5 = "ldr x0, [x0, #:got_lo12:q2c]"
|
||||
instr6 = "adrp x0, :got:visited"
|
||||
instr7 = "fadd v17.2d, v16.2d, v1.2d"
|
||||
instr8 = "mov.d x0, v16.d[1]"
|
||||
|
||||
parsed_1 = self.parser.parse_instruction(instr1)
|
||||
parsed_2 = self.parser.parse_instruction(instr2)
|
||||
@@ -89,6 +90,7 @@ class TestParserAArch64(unittest.TestCase):
|
||||
parsed_5 = self.parser.parse_instruction(instr5)
|
||||
parsed_6 = self.parser.parse_instruction(instr6)
|
||||
parsed_7 = self.parser.parse_instruction(instr7)
|
||||
parsed_8 = self.parser.parse_instruction(instr8)
|
||||
|
||||
self.assertEqual(parsed_1.instruction, "vcvt.F32.S32")
|
||||
self.assertEqual(parsed_1.operands[0].register.name, "1")
|
||||
@@ -142,6 +144,14 @@ class TestParserAArch64(unittest.TestCase):
|
||||
self.assertEqual(parsed_7.operands[0].register.shape, "d")
|
||||
self.assertEqual(self.parser.get_full_reg_name(parsed_7.operands[2].register), "v1.2d")
|
||||
|
||||
self.assertEqual(parsed_8.instruction, "mov.d")
|
||||
self.assertEqual(parsed_8.operands[0].register.name, "0")
|
||||
self.assertEqual(parsed_8.operands[0].register.prefix, "x")
|
||||
self.assertEqual(parsed_8.operands[1].register.name, "16")
|
||||
self.assertEqual(parsed_8.operands[1].register.prefix, "v")
|
||||
self.assertEqual(parsed_8.operands[1].register.index, "1")
|
||||
self.assertEqual(self.parser.get_full_reg_name(parsed_8.operands[1].register), "v16.d[1]")
|
||||
|
||||
def test_parse_line(self):
|
||||
line_comment = "// -- Begin main"
|
||||
line_label = ".LBB0_1: // =>This Inner Loop Header: Depth=1"
|
||||
|
||||
Reference in New Issue
Block a user