Skip to content

Commit 76f4dc7

Browse files
committed
avx emu asm constraint
1 parent 319d751 commit 76f4dc7

2 files changed

Lines changed: 13 additions & 13 deletions

File tree

jsrc/avxintrin-emu.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,46 +1180,46 @@ __emu_mm256_test_impl( __emu_mm, nzc, ps, ps, __emu__m256 );
11801180
({ \
11811181
__m128 res_ = (m1), m2_ = (m2); \
11821182
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); \
1183-
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "x" (m2_), [pred_] "i" (predicate) ); \
1183+
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "xm" (m2_), [pred_] "i" (predicate) ); \
11841184
res_; })
11851185

11861186
#define __emu_mm256_cmp_ps(m1, m2, predicate) \
11871187
({ \
11881188
__emu__m256 res_ = (m1), m2_ = (m2); \
11891189
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */ \
1190-
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[0]) : [m2_] "x" (m2_.__emu_m128[0]), [pred_] "i" (predicate) ); \
1191-
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[1]) : [m2_] "x" (m2_.__emu_m128[1]), [pred_] "i" (predicate) ); \
1190+
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[0]) : [m2_] "xm" (m2_.__emu_m128[0]), [pred_] "i" (predicate) ); \
1191+
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[1]) : [m2_] "xm" (m2_.__emu_m128[1]), [pred_] "i" (predicate) ); \
11921192
res_; })
11931193

11941194

11951195
#define __emu_mm_cmp_pd(m1, m2, predicate) \
11961196
({ \
11971197
__m128d res_ = (m1), m2_ = (m2); \
11981198
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */ \
1199-
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "x" (m2_), [pred_] "i" (predicate) ); \
1199+
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "xm" (m2_), [pred_] "i" (predicate) ); \
12001200
res_; })
12011201

12021202
#define __emu_mm256_cmp_pd(m1, m2, predicate) \
12031203
({ \
12041204
__emu__m256d res_ = (m1), m2_ = (m2); \
12051205
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */ \
1206-
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[0]) : [m2_] "x" (m2_.__emu_m128[0]), [pred_] "i" (predicate) ); \
1207-
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[1]) : [m2_] "x" (m2_.__emu_m128[1]), [pred_] "i" (predicate) ); \
1206+
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[0]) : [m2_] "xm" (m2_.__emu_m128[0]), [pred_] "i" (predicate) ); \
1207+
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[1]) : [m2_] "xm" (m2_.__emu_m128[1]), [pred_] "i" (predicate) ); \
12081208
res_; })
12091209

12101210

12111211
#define __emu_mm_cmp_ss(m1, m2, predicate) \
12121212
({ \
12131213
__m128 res_ = (m1), m2_ = (m2); \
12141214
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */ \
1215-
__asm__ ( "cmpss %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "x" (m2_), [pred_] "i" (predicate) ); \
1215+
__asm__ ( "cmpss %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "xm" (m2_), [pred_] "i" (predicate) ); \
12161216
res_; })
12171217

12181218
#define __emu_mm_cmp_sd(m1, m2, predicate) \
12191219
({ \
12201220
__m128 res_ = (m1), m2_ = (m2); \
12211221
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */ \
1222-
__asm__ ( "cmpsd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "x" (m2_), [pred_] "i" (predicate) ); \
1222+
__asm__ ( "cmpsd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "xm" (m2_), [pred_] "i" (predicate) ); \
12231223
res_; })
12241224

12251225

@@ -1233,7 +1233,7 @@ static __emu_inline __m128 __emu_mm_cmp_ps(__m128 m1, __m128 m2, const int predi
12331233

12341234
if (__builtin_constant_p(predicate) && predicate >= 0 && predicate <= 7 ) {
12351235
res = m1;
1236-
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "x" (m2), [pred_] "i" (predicate) );
1236+
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "xm" (m2), [pred_] "i" (predicate) );
12371237
} else {
12381238
res = _mm_setzero_ps();
12391239
__asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */
@@ -1249,7 +1249,7 @@ static __emu_inline __m128d __emu_mm_cmp_pd(__m128d m1, __m128d m2, const int pr
12491249

12501250
if ( predicate >= 0 && predicate <= 7 ) {
12511251
res = m1;
1252-
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "x" (m2), [pred_] "i" (predicate) );
1252+
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "xm" (m2), [pred_] "i" (predicate) );
12531253
} else {
12541254
__asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */
12551255
}
@@ -1265,7 +1265,7 @@ static __emu_inline __m128d __emu_mm_cmp_sd(__m128d m1, __m128d m2, const int pr
12651265

12661266
if ( predicate >= 0 && predicate <= 7 ) {
12671267
res = m1;
1268-
__asm__ ( "cmpsd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "x" (m2), [pred_] "i" (predicate) );
1268+
__asm__ ( "cmpsd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "xm" (m2), [pred_] "i" (predicate) );
12691269
} else {
12701270
__asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */
12711271
}
@@ -1279,7 +1279,7 @@ static __emu_inline __m128 __emu_mm_cmp_ss(__m128 m1, __m128 m2, const int predi
12791279

12801280
if ( predicate >= 0 && predicate <= 7 ) {
12811281
res = m1;
1282-
__asm__ ( "cmpss %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "x" (m2), [pred_] "i" (predicate) );
1282+
__asm__ ( "cmpss %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "xm" (m2), [pred_] "i" (predicate) );
12831283
} else {
12841284
__asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */
12851285
}

jsrc/va2.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1093,7 +1093,7 @@ static A jtva2(J jtfg,AD * RESTRICT a,AD * RESTRICT w,AD * RESTRICT self,UI allr
10931093
RESETRANK; // Ranks are required for sparse, which calls IRS-enabled routines internally. We clear in case the action routine calls a function with IRS
10941094

10951095
// Signal domain error if appropriate. Must do this after agreement tests
1096-
ASSERT(aadocv->f,EVDOMAIN);
1096+
if(!(aadocv->f))SEGFAULT; ASSERT(aadocv->f,EVDOMAIN);
10971097
if(likely(jtfg!=0)){ // if not sparse...
10981098
// Not sparse.
10991099

0 commit comments

Comments
 (0)