fsave: set high bits of 16-bit fields

This commit is contained in:
Fabian 2022-11-22 17:49:35 -06:00
parent 530105e934
commit 3c81e70794

View file

@ -551,14 +551,15 @@ pub unsafe fn fpu_fstenv32(addr: i32) {
return;
},
}
safe_write16(addr, (*fpu_control_word).into()).unwrap();
safe_write16(addr + 4, fpu_load_status_word().into()).unwrap();
safe_write16(addr + 8, fpu_load_tag_word()).unwrap();
let high_bits = 0xFFFF0000u32 as i32;
safe_write32(addr + 0, high_bits + *fpu_control_word as i32).unwrap();
safe_write32(addr + 4, high_bits + fpu_load_status_word() as i32).unwrap();
safe_write32(addr + 8, high_bits + fpu_load_tag_word()).unwrap();
safe_write32(addr + 12, *fpu_ip).unwrap();
safe_write16(addr + 16, *fpu_ip_selector).unwrap();
safe_write16(addr + 18, *fpu_opcode).unwrap();
safe_write32(addr + 20, *fpu_dp).unwrap();
safe_write16(addr + 24, *fpu_dp_selector).unwrap();
safe_write32(addr + 24, high_bits | *fpu_dp_selector).unwrap();
}
#[no_mangle]
pub unsafe fn fpu_load_tag_word() -> i32 {