Skip to content

Commit

Permalink
Rollup merge of rust-lang#77292 - lzutao:std_asm, r=Amanieu
Browse files Browse the repository at this point in the history
Prefer asm! in std - all in sgx module

Similar to the change in rust-lang#76669 but all `llvm_asm!` is gate in x86/x86_64 target.
Godbolt:
- https://rust.godbolt.org/z/h7nG1h
- https://rust.godbolt.org/z/xx39hW

r? @ghost
  • Loading branch information
Dylan-DPC committed Sep 28, 2020
2 parents a063e5e + d477201 commit f150083
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 16 deletions.
11 changes: 9 additions & 2 deletions library/std/src/sys/sgx/abi/mem.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,15 @@ extern "C" {
#[inline(always)]
#[unstable(feature = "sgx_platform", issue = "56975")]
pub fn image_base() -> u64 {
let base;
unsafe { llvm_asm!("lea IMAGE_BASE(%rip),$0":"=r"(base)) };
let base: u64;
unsafe {
asm!(
"lea IMAGE_BASE(%rip), {}",
lateout(reg) base,
// NOTE(#76738): ATT syntax is used to support LLVM 8 and 9.
options(att_syntax, nostack, preserves_flags, nomem, pure),
)
};
base
}

Expand Down
29 changes: 15 additions & 14 deletions library/std/src/sys/sgx/ext/arch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@ pub fn egetkey(request: &Align512<[u8; 512]>) -> Result<Align16<[u8; 16]>, u32>
let mut out = MaybeUninit::uninit();
let error;

llvm_asm!(
"enclu"
: "={eax}"(error)
: "{eax}"(ENCLU_EGETKEY),
"{rbx}"(request),
"{rcx}"(out.as_mut_ptr())
: "flags"
asm!(
"enclu",
inlateout("eax") ENCLU_EGETKEY => error,
in("rbx") request,
in("rcx") out.as_mut_ptr(),
// NOTE(#76738): ATT syntax is used to support LLVM 8 and 9.
options(att_syntax, nostack),
);

match error {
Expand All @@ -60,13 +60,14 @@ pub fn ereport(
unsafe {
let mut report = MaybeUninit::uninit();

llvm_asm!(
"enclu"
: /* no output registers */
: "{eax}"(ENCLU_EREPORT),
"{rbx}"(targetinfo),
"{rcx}"(reportdata),
"{rdx}"(report.as_mut_ptr())
asm!(
"enclu",
in("eax") ENCLU_EREPORT,
in("rbx") targetinfo,
in("rcx") reportdata,
in("rdx") report.as_mut_ptr(),
// NOTE(#76738): ATT syntax is used to support LLVM 8 and 9.
options(att_syntax, preserves_flags, nostack),
);

report.assume_init()
Expand Down

0 comments on commit f150083

Please sign in to comment.