Skip to content

Commit 08fab9e

Browse files
committed
[X86] Fix implicit sign conversion warnings in X86 headers.
Warnings in emmintrin.h and xmmintrin.h are reported by -fsanitize=implicit-integer-sign-change. Reviewed By: RKSimon, craig.topper Differential Revision: https://reviews.llvm.org/D77393
1 parent 7023f4b commit 08fab9e

File tree

3 files changed

+71
-28
lines changed

3 files changed

+71
-28
lines changed

clang/lib/Headers/emmintrin.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4970,10 +4970,10 @@ void _mm_pause(void);
49704970

49714971
#define _MM_SHUFFLE2(x, y) (((x) << 1) | (y))
49724972

4973-
#define _MM_DENORMALS_ZERO_ON (0x0040)
4974-
#define _MM_DENORMALS_ZERO_OFF (0x0000)
4973+
#define _MM_DENORMALS_ZERO_ON (0x0040U)
4974+
#define _MM_DENORMALS_ZERO_OFF (0x0000U)
49754975

4976-
#define _MM_DENORMALS_ZERO_MASK (0x0040)
4976+
#define _MM_DENORMALS_ZERO_MASK (0x0040U)
49774977

49784978
#define _MM_GET_DENORMALS_ZERO_MODE() (_mm_getcsr() & _MM_DENORMALS_ZERO_MASK)
49794979
#define _MM_SET_DENORMALS_ZERO_MODE(x) (_mm_setcsr((_mm_getcsr() & ~_MM_DENORMALS_ZERO_MASK) | (x)))

clang/lib/Headers/xmmintrin.h

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2931,31 +2931,31 @@ _mm_movemask_ps(__m128 __a)
29312931

29322932
#define _MM_SHUFFLE(z, y, x, w) (((z) << 6) | ((y) << 4) | ((x) << 2) | (w))
29332933

2934-
#define _MM_EXCEPT_INVALID (0x0001)
2935-
#define _MM_EXCEPT_DENORM (0x0002)
2936-
#define _MM_EXCEPT_DIV_ZERO (0x0004)
2937-
#define _MM_EXCEPT_OVERFLOW (0x0008)
2938-
#define _MM_EXCEPT_UNDERFLOW (0x0010)
2939-
#define _MM_EXCEPT_INEXACT (0x0020)
2940-
#define _MM_EXCEPT_MASK (0x003f)
2941-
2942-
#define _MM_MASK_INVALID (0x0080)
2943-
#define _MM_MASK_DENORM (0x0100)
2944-
#define _MM_MASK_DIV_ZERO (0x0200)
2945-
#define _MM_MASK_OVERFLOW (0x0400)
2946-
#define _MM_MASK_UNDERFLOW (0x0800)
2947-
#define _MM_MASK_INEXACT (0x1000)
2948-
#define _MM_MASK_MASK (0x1f80)
2949-
2950-
#define _MM_ROUND_NEAREST (0x0000)
2951-
#define _MM_ROUND_DOWN (0x2000)
2952-
#define _MM_ROUND_UP (0x4000)
2953-
#define _MM_ROUND_TOWARD_ZERO (0x6000)
2954-
#define _MM_ROUND_MASK (0x6000)
2955-
2956-
#define _MM_FLUSH_ZERO_MASK (0x8000)
2957-
#define _MM_FLUSH_ZERO_ON (0x8000)
2958-
#define _MM_FLUSH_ZERO_OFF (0x0000)
2934+
#define _MM_EXCEPT_INVALID (0x0001U)
2935+
#define _MM_EXCEPT_DENORM (0x0002U)
2936+
#define _MM_EXCEPT_DIV_ZERO (0x0004U)
2937+
#define _MM_EXCEPT_OVERFLOW (0x0008U)
2938+
#define _MM_EXCEPT_UNDERFLOW (0x0010U)
2939+
#define _MM_EXCEPT_INEXACT (0x0020U)
2940+
#define _MM_EXCEPT_MASK (0x003fU)
2941+
2942+
#define _MM_MASK_INVALID (0x0080U)
2943+
#define _MM_MASK_DENORM (0x0100U)
2944+
#define _MM_MASK_DIV_ZERO (0x0200U)
2945+
#define _MM_MASK_OVERFLOW (0x0400U)
2946+
#define _MM_MASK_UNDERFLOW (0x0800U)
2947+
#define _MM_MASK_INEXACT (0x1000U)
2948+
#define _MM_MASK_MASK (0x1f80U)
2949+
2950+
#define _MM_ROUND_NEAREST (0x0000U)
2951+
#define _MM_ROUND_DOWN (0x2000U)
2952+
#define _MM_ROUND_UP (0x4000U)
2953+
#define _MM_ROUND_TOWARD_ZERO (0x6000U)
2954+
#define _MM_ROUND_MASK (0x6000U)
2955+
2956+
#define _MM_FLUSH_ZERO_MASK (0x8000U)
2957+
#define _MM_FLUSH_ZERO_ON (0x8000U)
2958+
#define _MM_FLUSH_ZERO_OFF (0x0000U)
29592959

29602960
#define _MM_GET_EXCEPTION_MASK() (_mm_getcsr() & _MM_MASK_MASK)
29612961
#define _MM_GET_EXCEPTION_STATE() (_mm_getcsr() & _MM_EXCEPT_MASK)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Fix sign conversion warnings found by fsanitize=implicit-integer-sign-change
2+
// in intrinsic headers.
3+
// Preprocess file to workaround no warnings in system headers.
4+
// RUN: %clang_cc1 %s -triple x86_64-pc-linux-gnu -ffreestanding -E 2>&1 \
5+
// RUN: | %clang_cc1 -x c - -triple x86_64-pc-linux-gnu -ffreestanding -Wsign-conversion -E -o - 2>&1 \
6+
// RUN: | FileCheck --allow-empty %s
7+
// REQUIRES: x86-registered-target
8+
9+
#include <x86intrin.h>
10+
11+
void test0() {
12+
// CHECK-LABEL: test0
13+
// CHECK-NOT: warning:
14+
_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
15+
_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_OFF);
16+
_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_MASK);
17+
18+
_MM_SET_EXCEPTION_STATE(_MM_EXCEPT_INVALID);
19+
_MM_SET_EXCEPTION_STATE(_MM_EXCEPT_DENORM);
20+
_MM_SET_EXCEPTION_STATE(_MM_EXCEPT_DIV_ZERO);
21+
_MM_SET_EXCEPTION_STATE(_MM_EXCEPT_OVERFLOW);
22+
_MM_SET_EXCEPTION_STATE(_MM_EXCEPT_UNDERFLOW);
23+
_MM_SET_EXCEPTION_STATE(_MM_EXCEPT_INEXACT);
24+
_MM_SET_EXCEPTION_STATE(_MM_EXCEPT_MASK);
25+
26+
_MM_SET_EXCEPTION_MASK(_MM_MASK_INVALID);
27+
_MM_SET_EXCEPTION_MASK(_MM_MASK_DENORM);
28+
_MM_SET_EXCEPTION_MASK(_MM_MASK_DIV_ZERO);
29+
_MM_SET_EXCEPTION_MASK(_MM_MASK_OVERFLOW);
30+
_MM_SET_EXCEPTION_MASK(_MM_MASK_UNDERFLOW);
31+
_MM_SET_EXCEPTION_MASK(_MM_MASK_INEXACT);
32+
_MM_SET_EXCEPTION_MASK(_MM_MASK_MASK);
33+
34+
_MM_SET_ROUNDING_MODE(_MM_ROUND_NEAREST);
35+
_MM_SET_ROUNDING_MODE(_MM_ROUND_DOWN);
36+
_MM_SET_ROUNDING_MODE(_MM_ROUND_UP);
37+
_MM_SET_ROUNDING_MODE(_MM_ROUND_TOWARD_ZERO);
38+
_MM_SET_ROUNDING_MODE(_MM_ROUND_MASK);
39+
40+
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_MASK);
41+
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
42+
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_OFF);
43+
}

0 commit comments

Comments
 (0)