Skip to content

Commit f31a17e

Browse files
committed
wip
1 parent d5f1b97 commit f31a17e

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

crates/fiber/src/lib.rs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,4 +438,60 @@ mod tests {
438438
assert!(FiberStack::new(usize::MAX, true).is_err());
439439
assert!(FiberStack::new(usize::MAX, false).is_err());
440440
}
441+
442+
#[test]
443+
fn cross_thread_fiber() {
444+
let fiber = Fiber::<(), (), ()>::new(fiber_stack(1024 * 1024), move |_, s| {
445+
s.suspend(());
446+
})
447+
.unwrap();
448+
assert!(fiber.resume(()).is_err());
449+
std::thread::spawn(move || {
450+
assert!(fiber.resume(()).is_ok());
451+
})
452+
.join()
453+
.unwrap();
454+
}
455+
456+
#[test]
457+
fn what() {
458+
let a = 3;
459+
let b = 3;
460+
let a = &a as *const _ as usize;
461+
let b = &b as *const _ as usize;
462+
eprintln!();
463+
eprintln!("pacia1716({a:#x}, {b:#x}) = {:#x}", pacia1716(a, b));
464+
std::thread::scope(|s| {
465+
s.spawn(move || {
466+
eprintln!("pacia1716({a:#x}, {b:#x}) = {:#x}", pacia1716(a, b));
467+
});
468+
});
469+
eprintln!("pacib1716({a:#x}, {b:#x}) = {:#x}", pacib1716(a, b));
470+
std::thread::scope(|s| {
471+
s.spawn(move || {
472+
eprintln!("pacib1716({a:#x}, {b:#x}) = {:#x}", pacib1716(a, b));
473+
});
474+
});
475+
}
476+
477+
fn pacia1716(mut r17: usize, r16: usize) -> usize {
478+
unsafe {
479+
core::arch::asm!(
480+
"pacia1716\n",
481+
inout("x17") r17,
482+
in("x16") r16,
483+
);
484+
r17
485+
}
486+
}
487+
fn pacib1716(mut r17: usize, r16: usize) -> usize {
488+
unsafe {
489+
core::arch::asm!(
490+
"pacib1716\n",
491+
inout("x17") r17,
492+
in("x16") r16,
493+
);
494+
r17
495+
}
496+
}
441497
}

0 commit comments

Comments
 (0)