Skip to content

Commit b40f23b

Browse files
committed
add nvptx architecture
1 parent 663cf64 commit b40f23b

File tree

2 files changed

+113
-0
lines changed

2 files changed

+113
-0
lines changed

src/lib.rs

+4
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ pub mod vendor {
153153

154154
#[cfg(target_arch = "aarch64")]
155155
pub use aarch64::*;
156+
157+
pub use nvptx::*;
156158
}
157159

158160
#[macro_use]
@@ -194,3 +196,5 @@ mod x86;
194196
mod arm;
195197
#[cfg(target_arch = "aarch64")]
196198
mod aarch64;
199+
200+
mod nvptx;

src/nvptx/mod.rs

+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
//! nvptx intrinsics
2+
3+
#[allow(improper_ctypes)]
4+
extern "C" {
5+
#[link_name = "llvm.cuda.syncthreads"]
6+
fn syncthreads() -> ();
7+
#[link_name = "llvm.nvvm.read.ptx.sreg.ntid.x"]
8+
fn block_dim_x() -> i32;
9+
#[link_name = "llvm.nvvm.read.ptx.sreg.ntid.y"]
10+
fn block_dim_y() -> i32;
11+
#[link_name = "llvm.nvvm.read.ptx.sreg.ntid.z"]
12+
fn block_dim_z() -> i32;
13+
#[link_name = "llvm.nvvm.read.ptx.sreg.ctaid.x"]
14+
fn block_idx_x() -> i32;
15+
#[link_name = "llvm.nvvm.read.ptx.sreg.ctaid.y"]
16+
fn block_idx_y() -> i32;
17+
#[link_name = "llvm.nvvm.read.ptx.sreg.ctaid.z"]
18+
fn block_idx_z() -> i32;
19+
#[link_name = "llvm.nvvm.read.ptx.sreg.nctaid.x"]
20+
fn grid_dim_x() -> i32;
21+
#[link_name = "llvm.nvvm.read.ptx.sreg.nctaid.y"]
22+
fn grid_dim_y() -> i32;
23+
#[link_name = "llvm.nvvm.read.ptx.sreg.nctaid.z"]
24+
fn grid_dim_z() -> i32;
25+
#[link_name = "llvm.nvvm.read.ptx.sreg.tid.x"]
26+
fn thread_idx_x() -> i32;
27+
#[link_name = "llvm.nvvm.read.ptx.sreg.tid.y"]
28+
fn thread_idx_y() -> i32;
29+
#[link_name = "llvm.nvvm.read.ptx.sreg.tid.z"]
30+
fn thread_idx_z() -> i32;
31+
}
32+
33+
/// Synchronizes all threads in the block.
34+
#[inline(always)]
35+
pub unsafe fn _syncthreads() -> () {
36+
syncthreads()
37+
}
38+
39+
/// x-th thread-block dimension.
40+
#[inline(always)]
41+
pub unsafe fn _block_dim_x() -> i32 {
42+
block_dim_x()
43+
}
44+
45+
/// y-th thread-block dimension.
46+
#[inline(always)]
47+
pub unsafe fn _block_dim_y() -> i32 {
48+
block_dim_y()
49+
}
50+
51+
/// z-th thread-block dimension.
52+
#[inline(always)]
53+
pub unsafe fn _block_dim_z() -> i32 {
54+
block_dim_z()
55+
}
56+
57+
/// x-th thread-block index.
58+
#[inline(always)]
59+
pub unsafe fn _block_idx_x() -> i32 {
60+
block_idx_x()
61+
}
62+
63+
/// y-th thread-block index.
64+
#[inline(always)]
65+
pub unsafe fn _block_idx_y() -> i32 {
66+
block_idx_y()
67+
}
68+
69+
/// z-th thread-block index.
70+
#[inline(always)]
71+
pub unsafe fn _block_idx_z() -> i32 {
72+
block_idx_z()
73+
}
74+
75+
/// x-th block-grid dimension.
76+
#[inline(always)]
77+
pub unsafe fn _grid_dim_x() -> i32 {
78+
grid_dim_x()
79+
}
80+
81+
/// y-th block-grid dimension.
82+
#[inline(always)]
83+
pub unsafe fn _grid_dim_y() -> i32 {
84+
grid_dim_y()
85+
}
86+
87+
/// z-th block-grid dimension.
88+
#[inline(always)]
89+
pub unsafe fn _grid_dim_z() -> i32 {
90+
grid_dim_z()
91+
}
92+
93+
/// x-th thread index.
94+
#[inline(always)]
95+
pub unsafe fn _thread_idx_x() -> i32 {
96+
thread_idx_x()
97+
}
98+
99+
/// y-th thread index.
100+
#[inline(always)]
101+
pub unsafe fn _thread_idx_y() -> i32 {
102+
thread_idx_y()
103+
}
104+
105+
/// z-th thread index.
106+
#[inline(always)]
107+
pub unsafe fn _thread_idx_z() -> i32 {
108+
thread_idx_z()
109+
}

0 commit comments

Comments
 (0)