aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2022-02-07 16:23:37 +0100
committerJakub Konka <kubkon@jakubkonka.com>2022-02-07 20:13:29 +0100
commitac36fe71147a78e5f9299428eee776efcc9e4afb (patch)
treee0f37c25786d30541c69709f427ee7799bf617ff /src
parentbbd7969c87e03c9312eeafd9940ef8287a3ad689 (diff)
downloadzig-ac36fe71147a78e5f9299428eee776efcc9e4afb.tar.gz
zig-ac36fe71147a78e5f9299428eee776efcc9e4afb.zip
stage2,x64: fix registerAlias helper function
Diffstat (limited to 'src')
-rw-r--r--src/arch/x86_64/CodeGen.zig18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig
index 7baf74c9c2..1aac404346 100644
--- 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
}
}