|
@@ -116,7 +116,7 @@ impl ir::ConstVisitor for CodeGenerator {
|
|
if factors.len() > 1 ||
|
|
if factors.len() > 1 ||
|
|
factors.len() >= 1 && !factors.contains_key(&0) {
|
|
factors.len() >= 1 && !factors.contains_key(&0) {
|
|
dynasm!(self.buffer
|
|
dynasm!(self.buffer
|
|
- ; mov cl, BYTE [rdi]
|
|
|
|
|
|
+ ; movzx ecx, BYTE [rdi]
|
|
);
|
|
);
|
|
}
|
|
}
|
|
for (&offset, &factor) in factors {
|
|
for (&offset, &factor) in factors {
|
|
@@ -136,6 +136,24 @@ impl ir::ConstVisitor for CodeGenerator {
|
|
; sub BYTE [rdi + offset as i32], cl
|
|
; sub BYTE [rdi + offset as i32], cl
|
|
);
|
|
);
|
|
}
|
|
}
|
|
|
|
+ else if factor == 3 {
|
|
|
|
+ dynasm!(self.buffer
|
|
|
|
+ ; lea ebx, [rcx + rcx * 2]
|
|
|
|
+ ; mov [rdi + offset as i32], bl
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ else if factor == 5 {
|
|
|
|
+ dynasm!(self.buffer
|
|
|
|
+ ; lea ebx, [rcx + rcx * 4]
|
|
|
|
+ ; mov [rdi + offset as i32], bl
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ else if factor == 9 {
|
|
|
|
+ dynasm!(self.buffer
|
|
|
|
+ ; lea ebx, [rcx + rcx * 8]
|
|
|
|
+ ; mov [rdi + offset as i32], bl
|
|
|
|
+ );
|
|
|
|
+ }
|
|
else if factor.count_ones() == 1 {
|
|
else if factor.count_ones() == 1 {
|
|
dynasm!(self.buffer
|
|
dynasm!(self.buffer
|
|
; mov bl, cl
|
|
; mov bl, cl
|