emit_x64_data_processing: Deduplicate some code in zero-extension functions
EmitZeroExtendByteToLong() can be implemented in terms of EmitZeroExtendByteToWord() and EmitZeroExtendHalfToLong() can be implemented in terms of EmitZeroExtendHalfToWord().
This commit is contained in:
parent
a94f321f69
commit
cad9d31b83
@ -1218,17 +1218,13 @@ void EmitX64::EmitZeroExtendHalfToWord(EmitContext& ctx, IR::Inst* inst) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EmitX64::EmitZeroExtendByteToLong(EmitContext& ctx, IR::Inst* inst) {
|
void EmitX64::EmitZeroExtendByteToLong(EmitContext& ctx, IR::Inst* inst) {
|
||||||
auto args = ctx.reg_alloc.GetArgumentInfo(inst);
|
// x64 zeros upper 32 bits on a 32-bit move
|
||||||
Xbyak::Reg64 result = ctx.reg_alloc.UseScratchGpr(args[0]);
|
EmitZeroExtendByteToWord(ctx, inst);
|
||||||
code.movzx(result.cvt32(), result.cvt8()); // x64 zeros upper 32 bits on a 32-bit move
|
|
||||||
ctx.reg_alloc.DefineValue(inst, result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmitX64::EmitZeroExtendHalfToLong(EmitContext& ctx, IR::Inst* inst) {
|
void EmitX64::EmitZeroExtendHalfToLong(EmitContext& ctx, IR::Inst* inst) {
|
||||||
auto args = ctx.reg_alloc.GetArgumentInfo(inst);
|
// x64 zeros upper 32 bits on a 32-bit move
|
||||||
Xbyak::Reg64 result = ctx.reg_alloc.UseScratchGpr(args[0]);
|
EmitZeroExtendHalfToWord(ctx, inst);
|
||||||
code.movzx(result.cvt32(), result.cvt16()); // x64 zeros upper 32 bits on a 32-bit move
|
|
||||||
ctx.reg_alloc.DefineValue(inst, result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmitX64::EmitZeroExtendWordToLong(EmitContext& ctx, IR::Inst* inst) {
|
void EmitX64::EmitZeroExtendWordToLong(EmitContext& ctx, IR::Inst* inst) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user