cranelift: Add COFF TLS Support (#4546)
* cranelift: Implement COFF TLS Relocations * cranelift: Emit SecRel relocations * cranelift: Handle _tls_index symbol in backend
This commit is contained in:
@@ -2222,28 +2222,30 @@ fn lower_insn_to_regs<C: LowerCtx<I = Inst>>(
|
||||
ctx.emit(Inst::gen_move(dst_hi, src.regs()[1], types::I64));
|
||||
}
|
||||
|
||||
Opcode::TlsValue => match flags.tls_model() {
|
||||
TlsModel::ElfGd => {
|
||||
let dst = get_output_reg(ctx, outputs[0]).only_reg().unwrap();
|
||||
let (name, _, _) = ctx.symbol_value(insn).unwrap();
|
||||
let symbol = name.clone();
|
||||
ctx.emit(Inst::ElfTlsGetAddr { symbol });
|
||||
ctx.emit(Inst::gen_move(dst, regs::rax(), types::I64));
|
||||
}
|
||||
TlsModel::Macho => {
|
||||
let dst = get_output_reg(ctx, outputs[0]).only_reg().unwrap();
|
||||
let (name, _, _) = ctx.symbol_value(insn).unwrap();
|
||||
let symbol = name.clone();
|
||||
ctx.emit(Inst::MachOTlsGetAddr { symbol });
|
||||
ctx.emit(Inst::gen_move(dst, regs::rax(), types::I64));
|
||||
}
|
||||
_ => {
|
||||
todo!(
|
||||
Opcode::TlsValue => {
|
||||
let dst = get_output_reg(ctx, outputs[0]).only_reg().unwrap();
|
||||
let (name, _, _) = ctx.symbol_value(insn).unwrap();
|
||||
let symbol = name.clone();
|
||||
|
||||
match flags.tls_model() {
|
||||
TlsModel::ElfGd => {
|
||||
ctx.emit(Inst::ElfTlsGetAddr { symbol });
|
||||
ctx.emit(Inst::gen_move(dst, regs::rax(), types::I64));
|
||||
}
|
||||
TlsModel::Macho => {
|
||||
ctx.emit(Inst::MachOTlsGetAddr { symbol });
|
||||
ctx.emit(Inst::gen_move(dst, regs::rax(), types::I64));
|
||||
}
|
||||
TlsModel::Coff => {
|
||||
ctx.emit(Inst::CoffTlsGetAddr { symbol });
|
||||
ctx.emit(Inst::gen_move(dst, regs::rax(), types::I64));
|
||||
}
|
||||
_ => todo!(
|
||||
"Unimplemented TLS model in x64 backend: {:?}",
|
||||
flags.tls_model()
|
||||
);
|
||||
),
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
Opcode::SqmulRoundSat => {
|
||||
// Lane-wise saturating rounding multiplication in Q15 format
|
||||
|
||||
Reference in New Issue
Block a user