Skip to content

Commit 8687d0b

Browse files
committed
[Kompjuta] Add some RISC-V vector support code
1 parent ed877f0 commit 8687d0b

1 file changed

Lines changed: 167 additions & 0 deletions

File tree

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
#ifndef KORE_RISCV_VECTOR_UTIL_HEADER
2+
#define KORE_RISCV_VECTOR_UTIL_HEADER
3+
4+
#include <riscv_vector.h>
5+
6+
#ifdef __cplusplus
7+
extern "C" {
8+
#endif
9+
10+
typedef struct {
11+
_Alignas(128) float lane[32];
12+
} kore_float_x32;
13+
14+
static inline vfloat32m1_t kore_float_x32_load(const kore_float_x32 *p) {
15+
size_t _vector_length = __riscv_vsetvl_e32m1(32);
16+
return __riscv_vle32_v_f32m1(p->lane, _vector_length);
17+
}
18+
19+
static inline void vec32f_store(kore_float_x32 *p, vfloat32m1_t v) {
20+
size_t _vector_length = __riscv_vsetvl_e32m1(32);
21+
__riscv_vse32_v_f32m1(p->lane, v, _vector_length);
22+
}
23+
24+
typedef struct kore_float2_x32 {
25+
kore_float_x32 x;
26+
kore_float_x32 y;
27+
} kore_float2_x32;
28+
29+
typedef struct kore_float3_x32 {
30+
kore_float_x32 x;
31+
kore_float_x32 y;
32+
kore_float_x32 z;
33+
} kore_float3_x32;
34+
35+
typedef struct kore_float4_x32 {
36+
kore_float_x32 x;
37+
kore_float_x32 y;
38+
kore_float_x32 z;
39+
kore_float_x32 w;
40+
} kore_float4_x32;
41+
42+
/*typedef struct kore_int2x4 {
43+
kore_int32x4 x;
44+
kore_int32x4 y;
45+
} kore_int2x4;
46+
47+
typedef struct kore_int3x4 {
48+
kore_int32x4 x;
49+
kore_int32x4 y;
50+
kore_int32x4 z;
51+
} kore_int3x4;
52+
53+
typedef struct kore_int4x4 {
54+
kore_int32x4 x;
55+
kore_int32x4 y;
56+
kore_int32x4 z;
57+
kore_int32x4 w;
58+
} kore_int4x4;
59+
60+
typedef struct kore_uint2x4 {
61+
kore_uint32x4 x;
62+
kore_uint32x4 y;
63+
} kore_uint2x4;
64+
65+
typedef struct kore_uint3x4 {
66+
kore_uint32x4 x;
67+
kore_uint32x4 y;
68+
kore_uint32x4 z;
69+
} kore_uint3x4;
70+
71+
typedef struct kore_uint4x4 {
72+
kore_uint32x4 x;
73+
kore_uint32x4 y;
74+
kore_uint32x4 z;
75+
kore_uint32x4 w;
76+
} kore_uint4x4;*/
77+
78+
kore_float4 kore_riscv_create_float4(float value0, float value1, float value2, float value3);
79+
80+
kore_float_x32 kore_riscv_sin_f1_x32(kore_float_x32 value);
81+
82+
kore_float_x32 kore_riscv_length_f2_x32(kore_float2_x32 value);
83+
84+
//kore_int2x4 kore_riscv_int2_u2_x4(kore_uint2x4 value);
85+
86+
//kore_float2x32 kore_riscv_create_float2_i2_x4(kore_int2x4 value);
87+
88+
//kore_float32x32 kore_riscv_create_float_u1_x4(kore_uint32x4 value);
89+
90+
static inline kore_float4_x32 kore_riscv_create_float4_f1_f1_f1_f1_x32(vfloat32m1_t value0, vfloat32m1_t value1, vfloat32m1_t value2, vfloat32m1_t value3) {
91+
kore_float4_x32 value;
92+
vec32f_store(&value.x, value0);
93+
vec32f_store(&value.y, value1);
94+
vec32f_store(&value.z, value2);
95+
vec32f_store(&value.w, value3);
96+
return value;
97+
}
98+
99+
//kore_int2x4 kore_riscv_sub_i2_i1_x4(kore_int2x4 value0, kore_int32x4 value1);
100+
101+
kore_float2_x32 kore_riscv_div_f2_f1_x32(kore_float2_x32 value0, kore_float_x32 value1);
102+
103+
//kore_uint32x4 kore_riscv_add_u1_u1_x4(kore_uint32x4 value0, kore_uint32x4 value1);
104+
105+
kore_float_x32 kore_riscv_mult_f1_f1_x32(kore_float_x32 value0, kore_float_x32 value1);
106+
107+
kore_float_x32 kore_riscv_add_f1_f1_x32(kore_float_x32 value0, kore_float_x32 value1);
108+
109+
kore_float_x32 kore_riscv_sub_f1_f1_x32(kore_float_x32 value0, kore_float_x32 value1);
110+
111+
//kore_int32x4 kore_riscv_mult_u1_i1_x4(kore_uint32x4 value0, kore_int32x4 value1);
112+
113+
//kore_int32x4 kore_riscv_add_u1_i1_x4(kore_uint32x4 value0, kore_int32x4 value1);
114+
115+
//kore_uint2x4 kore_riscv_swizzle_xy_u3_x4(kore_uint3x4 value);
116+
117+
//kore_uint32x4 kore_riscv_swizzle_x_u2_x4(kore_uint2x4 value);
118+
119+
//kore_uint32x4 kore_riscv_swizzle_y_u2_x4(kore_uint2x4 value);
120+
121+
//kore_uint32x4 kore_riscv_swizzle_x_u3_x4(kore_uint3x4 value);
122+
123+
//kore_uint32x4 kore_riscv_swizzle_y_u3_x4(kore_uint3x4 value);
124+
125+
float kore_riscv_sin_f1_x1(float value);
126+
127+
float kore_riscv_length_f2_x1(kore_float2 value);
128+
129+
//kore_int2 kore_riscv_int2_u2_x1(kore_uint2 value);
130+
131+
//kore_float2 kore_riscv_create_float2_i2_x1(kore_int2 value);
132+
133+
//float kore_riscv_create_float_u1_x1(uint32_t value);
134+
135+
kore_float4 kore_riscv_create_float4_f1_f1_f1_f1_x1(float value0, float value1, float value2, float value3);
136+
137+
//kore_int2 kore_riscv_sub_i2_i1_x1(kore_int2 value0, int value1);
138+
139+
kore_float2 kore_riscv_div_f2_f1_x1(kore_float2 value0, float value1);
140+
141+
//uint32_t kore_riscv_add_u1_u1_x1(uint32_t value0, uint32_t value1);
142+
143+
float kore_riscv_mult_f1_f1_x1(float value0, float value1);
144+
145+
float kore_riscv_add_f1_f1_x1(float value0, float value1);
146+
147+
float kore_riscv_sub_f1_f1_x1(float value0, float value1);
148+
149+
//int kore_riscv_mult_u1_i1_x1(uint32_t value0, int value1);
150+
151+
//int kore_riscv_add_u1_i1_x1(uint32_t value0, int value1);
152+
153+
//kore_uint2 kore_riscv_swizzle_xy_u3_x1(kore_uint3 value);
154+
155+
//uint32_t kore_riscv_swizzle_x_u2_x1(kore_uint2 value);
156+
157+
//uint32_t kore_riscv_swizzle_y_u2_x1(kore_uint2 value);
158+
159+
//uint32_t kore_riscv_swizzle_x_u3_x1(kore_uint3 value);
160+
161+
//uint32_t kore_riscv_swizzle_y_u3_x1(kore_uint3 value);
162+
163+
#ifdef __cplusplus
164+
}
165+
#endif
166+
167+
#endif

0 commit comments

Comments
 (0)