| ... | ... | @@ -581,12 +581,14 @@ pub const Hexagon = extern struct { |
| 581 | 581 | /// This is an `extern struct` so that inline assembly in `current` can use field offsets. |
| 582 | 582 | pub const LoongArch = extern struct { |
| 583 | 583 | /// The numbered general-purpose registers r0 - r31. r0 must be zero. |
| 584 | | r: [32]usize, |
| 585 | | pc: usize, |
| 584 | r: [32]Gpr, |
| 585 | pc: Gpr, |
| 586 | |
| 587 | pub const Gpr = if (builtin.target.cpu.arch == .loongarch64) u64 else u32; |
| 586 | 588 | |
| 587 | 589 | pub inline fn current() LoongArch { |
| 588 | 590 | var ctx: LoongArch = undefined; |
| 589 | | asm volatile (if (@sizeOf(usize) == 8) |
| 591 | asm volatile (if (Gpr == u64) |
| 590 | 592 | \\ st.d $zero, $t0, 0 |
| 591 | 593 | \\ st.d $ra, $t0, 8 |
| 592 | 594 | \\ st.d $tp, $t0, 16 |
| ... | ... | @@ -679,12 +681,14 @@ pub const LoongArch = extern struct { |
| 679 | 681 | /// This is an `extern struct` so that inline assembly in `current` can use field offsets. |
| 680 | 682 | pub const Riscv = extern struct { |
| 681 | 683 | /// The numbered general-purpose registers r0 - r31. r0 must be zero. |
| 682 | | r: [32]usize, |
| 683 | | pc: usize, |
| 684 | r: [32]Gpr, |
| 685 | pc: Gpr, |
| 686 | |
| 687 | pub const Gpr = if (builtin.target.cpu.arch.isRiscv64()) u64 else u32; |
| 684 | 688 | |
| 685 | 689 | pub inline fn current() Riscv { |
| 686 | 690 | var ctx: Riscv = undefined; |
| 687 | | asm volatile (if (@sizeOf(usize) == 8) |
| 691 | asm volatile (if (Gpr == u64) |
| 688 | 692 | \\ sd zero, 0(t0) |
| 689 | 693 | \\ sd ra, 8(t0) |
| 690 | 694 | \\ sd sp, 16(t0) |