diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index 21ea88b100..c89770fba6 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -1008,20 +1008,22 @@ fn (mut p Parser) asm_stmt(is_top_level bool) ast.AsmStmt { p.scope = scope p.check(.semicolon) for p.tok.kind == .name { - reg := p.reg_or_alias() + reg := ast.AsmRegister{ + name: p.tok.lit + typ: 0 + size: -1 + } + p.check(.name) mut comments := []ast.Comment{} for p.tok.kind == .comment { comments << p.comment() } - if reg is ast.AsmRegister { - clobbered << ast.AsmClobbered{ - reg: reg - comments: comments - } - } else { - p.error('not a register: $reg') + clobbered << ast.AsmClobbered{ + reg: reg + comments: comments } + if p.tok.kind in [.rcbr, .semicolon] { break } diff --git a/vlib/v/tests/assembly/asm_test.amd64.v b/vlib/v/tests/assembly/asm_test.amd64.v index 912fc26d48..06ad1fd2b1 100644 --- a/vlib/v/tests/assembly/asm_test.amd64.v +++ b/vlib/v/tests/assembly/asm_test.amd64.v @@ -92,6 +92,7 @@ fn test_inline_asm() { addq [in_data + rcx * 4 + 0], 2 ; ; c (n.len - 1) // c is counter (loop) register r (n.data) as in_data + ; memory } assert n == [7, 11, 2, 6]