commit ac36fe71147a78e5f9299428eee776efcc9e4afb (tree)
parent bbd7969c87e03c9312eeafd9940ef8287a3ad689
Author: Jakub Konka <kubkon@jakubkonka.com>
Date: Mon, 7 Feb 2022 16:23:37 +0100
stage2,x64: fix registerAlias helper function
Diffstat:
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig
@@ -4692,11 +4692,17 @@ fn parseRegName(name: []const u8) ?Register {
fn registerAlias(reg: Register, size_bytes: u32) Register {
// For x86_64 we have to pick a smaller register alias depending on abi size.
- switch (size_bytes) {
- 1 => return reg.to8(),
- 2 => return reg.to16(),
- 4 => return reg.to32(),
- 8 => return reg.to64(),
- else => unreachable,
+ if (size_bytes == 0) {
+ unreachable; // should be comptime known
+ } else if (size_bytes <= 1) {
+ return reg.to8();
+ } else if (size_bytes <= 2) {
+ return reg.to16();
+ } else if (size_bytes <= 4) {
+ return reg.to32();
+ } else if (size_bytes <= 8) {
+ return reg.to64();
+ } else {
+ unreachable; // TODO handle floating-point registers
}
}