Parse `rs1, rs2, label` for a branch instruction.
(kind: BranchKind, operands: &str)
| 493 | } |
| 494 | |
| 495 | // Parse `"rd, rs"` -> `(rd_reg, rs_reg)`. Used by `mv`. |
| 496 | fn parse_two_regs(operands: &str) -> Option<(u8, u8)> { |
| 497 | let (rd_str, rs_str) = parse_two_fields(operands)?; |
| 498 | Some((parse_int_reg(rd_str)?, parse_int_reg(rs_str)?)) |
| 499 | } |
| 500 | |
| 501 | // Parse `"rd, rs1, imm"` -> (rd_reg, rs1_reg, imm_i32). |
| 502 | fn parse_r_i_imm(operands: &str) -> Option<(u8, u8, i32)> { |
| 503 | let mut parts = operands.splitn(3, ','); |
| 504 | let rd = parse_int_reg(parts.next()?.trim())?; |
| 505 | let rs1 = parse_int_reg(parts.next()?.trim())?; |
| 506 | let imm = parse_imm_i64(parts.next()?.trim())? as i32; |
| 507 | Some((rd, rs1, imm)) |
| 508 | } |
| 509 | |
| 510 | // Parse `"rs2, imm(rs1)"` -> (rs2_reg, rs1_reg, imm_i32). Used by stores. |
| 511 | fn parse_store_mem(operands: &str) -> Option<(u8, u8, i32)> { |
| 512 | let comma = operands.find(',')?; |
no test coverage detected