Skip to content

Commit 968e1f5

Browse files
committed
Update RISC-V Intrinsic API.
1 parent 45786b0 commit 968e1f5

32 files changed

+316
-249
lines changed

Makefile.prebuild

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ TARGET_FLAGS = -mips64r6
4646
endif
4747

4848
ifeq ($(TARGET), C910V)
49-
TARGET_FLAGS = -march=rv64gcvxthead -mabi=lp64v
49+
TARGET_FLAGS = -march=rv64gcv0p7_zfh_xtheadc -mabi=lp64d
5050
endif
5151

5252
all: getarch_2nd

Makefile.riscv64

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
ifeq ($(CORE), C910V)
2-
CCOMMON_OPT += -march=rv64gcvxthead -mabi=lp64v
3-
FCOMMON_OPT += -march=rv64gcvxthead -mabi=lp64v -static
2+
CCOMMON_OPT += -march=rv64imafdcv0p7_zfh_xtheadc -mabi=lp64d -mtune=c920
3+
FCOMMON_OPT += -march=rv64imafdcv0p7_zfh_xtheadc -mabi=lp64d -mtune=c920 -static
44
endif

common_riscv64.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ static inline int blas_quickdivide(blasint x, blasint y){
9292
#define SEEK_ADDRESS
9393

9494
#if defined(C910V)
95-
#include <riscv-vector.h>
95+
#include <riscv_vector.h>
9696
#endif
9797

9898
#endif

kernel/riscv64/amax_vector.c

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -88,17 +88,17 @@ asm volatile(
8888
"vor.vv v0, %1, %1\n\t"
8989
"vsetvli x0, %3, e64,m8 \n\t"
9090
"vfrsub.vf %0, %0, %2, v0.t \n\t"
91-
:"+v"(v0)
92-
:"v"(mask0), "f"(zero), "r"(gvl)
91+
:"+vd"(v0)
92+
:"vd"(mask0), "f"(zero), "r"(gvl)
9393
:"v0");
9494
#else
9595
asm volatile(
9696
"vsetvli zero, zero, e8, m1\n\t"
9797
"vor.vv v0, %1, %1\n\t"
9898
"vsetvli x0, %3, e32,m8 \n\t"
9999
"vfrsub.vf %0, %0, %2, v0.t \n\t"
100-
:"+v"(v0)
101-
:"v"(mask0), "f"(zero), "r"(gvl)
100+
:"+vd"(v0)
101+
:"vd"(mask0), "f"(zero), "r"(gvl)
102102
:"v0");
103103
#endif
104104

@@ -113,25 +113,26 @@ asm volatile(
113113
"vor.vv v0, %1, %1\n\t"
114114
"vsetvli x0, %3, e64,m8 \n\t"
115115
"vfrsub.vf %0, %0, %2, v0.t \n\t"
116-
:"+v"(v1)
117-
:"v"(mask1), "f"(zero), "r"(gvl)
116+
:"+vd"(v1)
117+
:"vd"(mask1), "f"(zero), "r"(gvl)
118118
:"v0");
119119
#else
120120
asm volatile(
121121
"vsetvli zero, zero, e8, m1\n\t"
122122
"vor.vv v0, %1, %1\n\t"
123123
"vsetvli x0, %3, e32,m8 \n\t"
124124
"vfrsub.vf %0, %0, %2, v0.t \n\t"
125-
:"+v"(v1)
126-
:"v"(mask1), "f"(zero), "r"(gvl)
125+
:"+vd"(v1)
126+
:"vd"(mask1), "f"(zero), "r"(gvl)
127127
:"v0");
128128
#endif
129129

130130
v_max = VFMAXVV_FLOAT(v_max, v1, gvl);
131131
j += gvl*2;
132132
}
133133
v_res = VFREDMAXVS_FLOAT(v_res, v_max, v_zero, gvl);
134-
maxf = v_res[0];
134+
maxf = *((FLOAT*)&v_res);
135+
//maxf = v_res[0];
135136
}
136137
for(;j<n;){
137138
gvl = VSETVL(n-j);
@@ -144,23 +145,23 @@ asm volatile(
144145
"vor.vv v0, %1, %1\n\t"
145146
"vsetvli x0, %3, e64,m8 \n\t"
146147
"vfrsub.vf %0, %0, %2, v0.t \n\t"
147-
:"+v"(v0)
148-
:"v"(mask0), "f"(zero), "r"(gvl)
148+
:"+vd"(v0)
149+
:"vd"(mask0), "f"(zero), "r"(gvl)
149150
:"v0");
150151
#else
151152
asm volatile(
152153
"vsetvli zero, zero, e8, m1\n\t"
153154
"vor.vv v0, %1, %1\n\t"
154155
"vsetvli x0, %3, e32,m8 \n\t"
155156
"vfrsub.vf %0, %0, %2, v0.t \n\t"
156-
:"+v"(v0)
157-
:"v"(mask0), "f"(zero), "r"(gvl)
157+
:"+vd"(v0)
158+
:"vd"(mask0), "f"(zero), "r"(gvl)
158159
:"v0");
159160
#endif
160161

161162
v_res = VFREDMAXVS_FLOAT(v_res, v0, v_zero, gvl);
162-
if(v_res[0] > maxf)
163-
maxf = v_res[0];
163+
if(*((FLOAT*)&v_res) > maxf)
164+
maxf = *((FLOAT*)&v_res);
164165
j += gvl;
165166
}
166167
}else{
@@ -179,17 +180,17 @@ asm volatile(
179180
"vor.vv v0, %1, %1\n\t"
180181
"vsetvli x0, %3, e64,m8 \n\t"
181182
"vfrsub.vf %0, %0, %2, v0.t \n\t"
182-
:"+v"(v0)
183-
:"v"(mask0), "f"(zero), "r"(gvl)
183+
:"+vd"(v0)
184+
:"vd"(mask0), "f"(zero), "r"(gvl)
184185
:"v0");
185186
#else
186187
asm volatile(
187188
"vsetvli zero, zero, e8, m1\n\t"
188189
"vor.vv v0, %1, %1\n\t"
189190
"vsetvli x0, %3, e32,m8 \n\t"
190191
"vfrsub.vf %0, %0, %2, v0.t \n\t"
191-
:"+v"(v0)
192-
:"v"(mask0), "f"(zero), "r"(gvl)
192+
:"+vd"(v0)
193+
:"vd"(mask0), "f"(zero), "r"(gvl)
193194
:"v0");
194195
#endif
195196

@@ -204,17 +205,17 @@ asm volatile(
204205
"vor.vv v0, %1, %1\n\t"
205206
"vsetvli x0, %3, e64,m8 \n\t"
206207
"vfrsub.vf %0, %0, %2, v0.t \n\t"
207-
:"+v"(v1)
208-
:"v"(mask1), "f"(zero), "r"(gvl)
208+
:"+vd"(v1)
209+
:"vd"(mask1), "f"(zero), "r"(gvl)
209210
:"v0");
210211
#else
211212
asm volatile(
212213
"vsetvli zero, zero, e8, m1\n\t"
213214
"vor.vv v0, %1, %1\n\t"
214215
"vsetvli x0, %3, e32,m8 \n\t"
215216
"vfrsub.vf %0, %0, %2, v0.t \n\t"
216-
:"+v"(v1)
217-
:"v"(mask1), "f"(zero), "r"(gvl)
217+
:"+vd"(v1)
218+
:"vd"(mask1), "f"(zero), "r"(gvl)
218219
:"v0");
219220
#endif
220221

@@ -223,7 +224,7 @@ asm volatile(
223224
ix += inc_xv*2;
224225
}
225226
v_res = VFREDMAXVS_FLOAT(v_res, v_max, v_zero, gvl);
226-
maxf = v_res[0];
227+
maxf = *((FLOAT*)&v_res);
227228
}
228229
for(;j<n;){
229230
gvl = VSETVL(n-j);
@@ -236,23 +237,23 @@ asm volatile(
236237
"vor.vv v0, %1, %1\n\t"
237238
"vsetvli x0, %3, e64,m8 \n\t"
238239
"vfrsub.vf %0, %0, %2, v0.t \n\t"
239-
:"+v"(v0)
240-
:"v"(mask0), "f"(zero), "r"(gvl)
240+
:"+vd"(v0)
241+
:"vd"(mask0), "f"(zero), "r"(gvl)
241242
:"v0");
242243
#else
243244
asm volatile(
244245
"vsetvli zero, zero, e8, m1\n\t"
245246
"vor.vv v0, %1, %1\n\t"
246247
"vsetvli x0, %3, e32,m8 \n\t"
247248
"vfrsub.vf %0, %0, %2, v0.t \n\t"
248-
:"+v"(v0)
249-
:"v"(mask0), "f"(zero), "r"(gvl)
249+
:"+vd"(v0)
250+
:"vd"(mask0), "f"(zero), "r"(gvl)
250251
:"v0");
251252
#endif
252253

253254
v_res = VFREDMAXVS_FLOAT(v_res, v0, v_zero, gvl);
254-
if(v_res[0] > maxf)
255-
maxf = v_res[0];
255+
if(*((FLOAT*)&v_res) > maxf)
256+
maxf = *((FLOAT*)&v_res);
256257
j += gvl;
257258
}
258259
}

kernel/riscv64/amin_vector.c

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,17 @@ asm volatile(
8787
"vor.vv v0, %1, %1\n\t"
8888
"vsetvli x0, %3, e64,m8 \n\t"
8989
"vfrsub.vf %0, %0, %2, v0.t \n\t"
90-
:"+v"(v0)
91-
:"v"(mask0), "f"(zero), "r"(gvl)
90+
:"+vd"(v0)
91+
:"vd"(mask0), "f"(zero), "r"(gvl)
9292
:"v0");
9393
#else
9494
asm volatile(
9595
"vsetvli zero, zero, e8, m1\n\t"
9696
"vor.vv v0, %1, %1\n\t"
9797
"vsetvli x0, %3, e32,m8 \n\t"
9898
"vfrsub.vf %0, %0, %2, v0.t \n\t"
99-
:"+v"(v0)
100-
:"v"(mask0), "f"(zero), "r"(gvl)
99+
:"+vd"(v0)
100+
:"vd"(mask0), "f"(zero), "r"(gvl)
101101
:"v0");
102102
#endif
103103
v_min = VFMINVV_FLOAT(v_min, v0, gvl);
@@ -111,25 +111,25 @@ asm volatile(
111111
"vor.vv v0, %1, %1\n\t"
112112
"vsetvli x0, %3, e64,m8 \n\t"
113113
"vfrsub.vf %0, %0, %2, v0.t \n\t"
114-
:"+v"(v1)
115-
:"v"(mask1), "f"(zero), "r"(gvl)
114+
:"+vd"(v1)
115+
:"vd"(mask1), "f"(zero), "r"(gvl)
116116
:"v0");
117117
#else
118118
asm volatile(
119119
"vsetvli zero, zero, e8, m1\n\t"
120120
"vor.vv v0, %1, %1\n\t"
121121
"vsetvli x0, %3, e32,m8 \n\t"
122122
"vfrsub.vf %0, %0, %2, v0.t \n\t"
123-
:"+v"(v1)
124-
:"v"(mask1), "f"(zero), "r"(gvl)
123+
:"+vd"(v1)
124+
:"vd"(mask1), "f"(zero), "r"(gvl)
125125
:"v0");
126126
#endif
127127

128128
v_min = VFMINVV_FLOAT(v_min, v1, gvl);
129129
j += gvl*2;
130130
}
131131
v_res = VFREDMINVS_FLOAT(v_res, v_min, v_max, gvl);
132-
minf = v_res[0];
132+
minf = *((FLOAT*)&v_res);
133133
}
134134
for(;j<n;){
135135
gvl = VSETVL(n-j);
@@ -142,22 +142,22 @@ asm volatile(
142142
"vor.vv v0, %1, %1\n\t"
143143
"vsetvli x0, %3, e64,m8 \n\t"
144144
"vfrsub.vf %0, %0, %2, v0.t \n\t"
145-
:"+v"(v0)
146-
:"v"(mask0), "f"(zero), "r"(gvl)
145+
:"+vd"(v0)
146+
:"vd"(mask0), "f"(zero), "r"(gvl)
147147
:"v0");
148148
#else
149149
asm volatile(
150150
"vsetvli zero, zero, e8, m1\n\t"
151151
"vor.vv v0, %1, %1\n\t"
152152
"vsetvli x0, %3, e32,m8 \n\t"
153153
"vfrsub.vf %0, %0, %2, v0.t \n\t"
154-
:"+v"(v0)
155-
:"v"(mask0), "f"(zero), "r"(gvl)
154+
:"+vd"(v0)
155+
:"vd"(mask0), "f"(zero), "r"(gvl)
156156
:"v0");
157157
#endif
158158
v_res = VFREDMINVS_FLOAT(v_res, v0, v_max, gvl);
159-
if(v_res[0] < minf)
160-
minf = v_res[0];
159+
if(*((FLOAT*)&v_res) < minf)
160+
minf = *((FLOAT*)&v_res);
161161
j += gvl;
162162
}
163163
}else{
@@ -176,17 +176,17 @@ asm volatile(
176176
"vor.vv v0, %1, %1\n\t"
177177
"vsetvli x0, %3, e64,m8 \n\t"
178178
"vfrsub.vf %0, %0, %2, v0.t \n\t"
179-
:"+v"(v0)
180-
:"v"(mask0), "f"(zero), "r"(gvl)
179+
:"+vd"(v0)
180+
:"vd"(mask0), "f"(zero), "r"(gvl)
181181
:"v0");
182182
#else
183183
asm volatile(
184184
"vsetvli zero, zero, e8, m1\n\t"
185185
"vor.vv v0, %1, %1\n\t"
186186
"vsetvli x0, %3, e32,m8 \n\t"
187187
"vfrsub.vf %0, %0, %2, v0.t \n\t"
188-
:"+v"(v0)
189-
:"v"(mask0), "f"(zero), "r"(gvl)
188+
:"+vd"(v0)
189+
:"vd"(mask0), "f"(zero), "r"(gvl)
190190
:"v0");
191191
#endif
192192
v_min = VFMINVV_FLOAT(v_min, v0, gvl);
@@ -200,17 +200,17 @@ asm volatile(
200200
"vor.vv v0, %1, %1\n\t"
201201
"vsetvli x0, %3, e64,m8 \n\t"
202202
"vfrsub.vf %0, %0, %2, v0.t \n\t"
203-
:"+v"(v1)
204-
:"v"(mask1), "f"(zero), "r"(gvl)
203+
:"+vd"(v1)
204+
:"vd"(mask1), "f"(zero), "r"(gvl)
205205
:"v0");
206206
#else
207207
asm volatile(
208208
"vsetvli zero, zero, e8, m1\n\t"
209209
"vor.vv v0, %1, %1\n\t"
210210
"vsetvli x0, %3, e32,m8 \n\t"
211211
"vfrsub.vf %0, %0, %2, v0.t \n\t"
212-
:"+v"(v1)
213-
:"v"(mask1), "f"(zero), "r"(gvl)
212+
:"+vd"(v1)
213+
:"vd"(mask1), "f"(zero), "r"(gvl)
214214
:"v0");
215215
#endif
216216

@@ -219,7 +219,7 @@ asm volatile(
219219
idx += inc_xv*2;
220220
}
221221
v_res = VFREDMINVS_FLOAT(v_res, v_min, v_max, gvl);
222-
minf = v_res[0];
222+
minf = *((FLOAT*)&v_res);
223223
}
224224
for(;j<n;){
225225
gvl = VSETVL(n-j);
@@ -232,22 +232,22 @@ asm volatile(
232232
"vor.vv v0, %1, %1\n\t"
233233
"vsetvli x0, %3, e64,m8 \n\t"
234234
"vfrsub.vf %0, %0, %2, v0.t \n\t"
235-
:"+v"(v0)
236-
:"v"(mask0), "f"(zero), "r"(gvl)
235+
:"+vd"(v0)
236+
:"vd"(mask0), "f"(zero), "r"(gvl)
237237
:"v0");
238238
#else
239239
asm volatile(
240240
"vsetvli zero, zero, e8, m1\n\t"
241241
"vor.vv v0, %1, %1\n\t"
242242
"vsetvli x0, %3, e32,m8 \n\t"
243243
"vfrsub.vf %0, %0, %2, v0.t \n\t"
244-
:"+v"(v0)
245-
:"v"(mask0), "f"(zero), "r"(gvl)
244+
:"+vd"(v0)
245+
:"vd"(mask0), "f"(zero), "r"(gvl)
246246
:"v0");
247247
#endif
248248
v_res = VFREDMINVS_FLOAT(v_res, v0, v_max, gvl);
249-
if(v_res[0] < minf)
250-
minf = v_res[0];
249+
if(*((FLOAT*)&v_res) < minf)
250+
minf = *((FLOAT*)&v_res);
251251
j += gvl;
252252
}
253253
}

0 commit comments

Comments
 (0)