Skip to content

Commit 4d012cc

Browse files
committed
__asm__ constraint "xm"
1 parent 464a75b commit 4d012cc

File tree

1 file changed

+28
-23
lines changed

1 file changed

+28
-23
lines changed

jsrc/avxintrin-emu.h

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,15 +1171,6 @@ __emu_mm256_test_impl( __emu_mm, nzc, ps, ps, __emu__m256 );
11711171

11721172
#endif
11731173

1174-
#if defined(__clang__)
1175-
#define XM "xm"
1176-
#elif defined( __GNUC__ )
1177-
#define XM "x"
1178-
#else
1179-
#define XM "x"
1180-
#endif
1181-
1182-
11831174
#if defined(_WIN32) || ( !defined(__clang__) && defined( __GNUC__ ) && ( __GNUC__ == 4 ) && (__GNUC_MINOR__ < 4 ) ) || defined(OPTMO0)
11841175
/* use macro implementation instead of inline functions to allow -O0 for GCC pre 4.4 */
11851176

@@ -1189,46 +1180,46 @@ __emu_mm256_test_impl( __emu_mm, nzc, ps, ps, __emu__m256 );
11891180
({ \
11901181
__m128 res_ = (m1), m2_ = (m2); \
11911182
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); \
1192-
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] XM (m2_), [pred_] "i" (predicate) ); \
1183+
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "x" (m2_), [pred_] "i" (predicate) ); \
11931184
res_; })
11941185

11951186
#define __emu_mm256_cmp_ps(m1, m2, predicate) \
11961187
({ \
11971188
__emu__m256 res_ = (m1), m2_ = (m2); \
11981189
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */ \
1199-
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[0]) : [m2_] XM (m2_.__emu_m128[0]), [pred_] "i" (predicate) ); \
1200-
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[1]) : [m2_] XM (m2_.__emu_m128[1]), [pred_] "i" (predicate) ); \
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) ); \
12011192
res_; })
12021193

12031194

12041195
#define __emu_mm_cmp_pd(m1, m2, predicate) \
12051196
({ \
12061197
__m128d res_ = (m1), m2_ = (m2); \
12071198
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */ \
1208-
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] XM (m2_), [pred_] "i" (predicate) ); \
1199+
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "x" (m2_), [pred_] "i" (predicate) ); \
12091200
res_; })
12101201

12111202
#define __emu_mm256_cmp_pd(m1, m2, predicate) \
12121203
({ \
12131204
__emu__m256d res_ = (m1), m2_ = (m2); \
12141205
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */ \
1215-
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[0]) : [m2_] XM (m2_.__emu_m128[0]), [pred_] "i" (predicate) ); \
1216-
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_.__emu_m128[1]) : [m2_] XM (m2_.__emu_m128[1]), [pred_] "i" (predicate) ); \
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) ); \
12171208
res_; })
12181209

12191210

12201211
#define __emu_mm_cmp_ss(m1, m2, predicate) \
12211212
({ \
12221213
__m128 res_ = (m1), m2_ = (m2); \
12231214
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */ \
1224-
__asm__ ( "cmpss %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] XM (m2_), [pred_] "i" (predicate) ); \
1215+
__asm__ ( "cmpss %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "x" (m2_), [pred_] "i" (predicate) ); \
12251216
res_; })
12261217

12271218
#define __emu_mm_cmp_sd(m1, m2, predicate) \
12281219
({ \
12291220
__m128 res_ = (m1), m2_ = (m2); \
12301221
if ( 7 < (unsigned)predicate ) __asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */ \
1231-
__asm__ ( "cmpsd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] XM (m2_), [pred_] "i" (predicate) ); \
1222+
__asm__ ( "cmpsd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res_) : [m2_] "x" (m2_), [pred_] "i" (predicate) ); \
12321223
res_; })
12331224

12341225

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

12431234
if (__builtin_constant_p(predicate) && predicate >= 0 && predicate <= 7 ) {
12441235
res = m1;
1245-
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] XM (m2), [pred_] "i" (predicate) );
1236+
#if defined(__clang__)
1237+
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "xm" (m2), [pred_] "i" (predicate) );
1238+
#else
1239+
__asm__ ( "cmpps %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "x" (m2), [pred_] "i" (predicate) );
1240+
#endif
12461241
} else {
12471242
res = _mm_setzero_ps();
12481243
__asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */
@@ -1258,7 +1253,11 @@ static __emu_inline __m128d __emu_mm_cmp_pd(__m128d m1, __m128d m2, const int pr
12581253

12591254
if ( predicate >= 0 && predicate <= 7 ) {
12601255
res = m1;
1261-
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] XM (m2), [pred_] "i" (predicate) );
1256+
#if defined(__clang__)
1257+
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "xm" (m2), [pred_] "i" (predicate) );
1258+
#else
1259+
__asm__ ( "cmppd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "x" (m2), [pred_] "i" (predicate) );
1260+
#endif
12621261
} else {
12631262
__asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */
12641263
}
@@ -1274,7 +1273,11 @@ static __emu_inline __m128d __emu_mm_cmp_sd(__m128d m1, __m128d m2, const int pr
12741273

12751274
if ( predicate >= 0 && predicate <= 7 ) {
12761275
res = m1;
1277-
__asm__ ( "cmpsd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] XM (m2), [pred_] "i" (predicate) );
1276+
#if defined(__clang__)
1277+
__asm__ ( "cmpsd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "xm" (m2), [pred_] "i" (predicate) );
1278+
#else
1279+
__asm__ ( "cmpsd %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "x" (m2), [pred_] "i" (predicate) );
1280+
#endif
12781281
} else {
12791282
__asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */
12801283
}
@@ -1288,7 +1291,11 @@ static __emu_inline __m128 __emu_mm_cmp_ss(__m128 m1, __m128 m2, const int predi
12881291

12891292
if ( predicate >= 0 && predicate <= 7 ) {
12901293
res = m1;
1291-
__asm__ ( "cmpss %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] XM (m2), [pred_] "i" (predicate) );
1294+
#if defined(__clang__)
1295+
__asm__ ( "cmpss %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "xm" (m2), [pred_] "i" (predicate) );
1296+
#else
1297+
__asm__ ( "cmpss %[pred_], %[m2_], %[res_]" : [res_] "+x" (res) : [m2_] "x" (m2), [pred_] "i" (predicate) );
1298+
#endif
12921299
} else {
12931300
__asm__ __volatile__ ( "ud2" : : : "memory" ); /* not supported yet */
12941301
}
@@ -2422,6 +2429,4 @@ static __emu_inline __emu__m256i __emu_mm256_sllv_epi64(__emu__m256i a, __emu__m
24222429

24232430
#endif /* __EMU_M256_NOMAP */
24242431

2425-
#undef XM
2426-
24272432
#endif /* __EMU_M256_AVXIMMINTRIN_EMU_H__ */

0 commit comments

Comments
 (0)