Files
RedBear-OS/local/recipes/dev/libclc/source/clang/test/CodeGen/msp430-abi-complex.c
T
vasilito cb424d7448 build: static patch-sanity linter (shift-left the malformed-patch class)
verify-patch-sanity.py validates every active recipe .patch has internally-
consistent hunk line counts — catching the 'malformed patch at line N' failure
at commit/CI/preflight time instead of hours into a cook. This cycle hit that
class three times (qtwaylandscanner, sddm, xwayland), each only discovered when
cookbook tried to apply the patch.

Running it across the repo found 29 latent malformed patches (validated against
GNU patch: e.g. relibc/P3-sysv-ipc reproduces 'malformed patch at line 22').
They were harmless only because they sit in vendored recipes (baked, not re-
applied) — but would fail on any version-bump re-derivation. --fix recounts the
hunk headers (body untouched) and repaired all 29.

Wired into build-preflight.sh (Phase 1.0D) and redbear-ci.yml, with a unit test
(test-patch-sanity.sh). Skips archived/legacy trees and unvalidatable formats
(empty placeholders, bare-@@ git hunks).
2026-08-01 05:13:02 +03:00

227 lines
5.6 KiB
C

// REQUIRES: msp430-registered-target
// RUN: %clang -target msp430 -Os -S -o- %s | FileCheck %s
volatile int N;
volatile int i16_1, i16_2;
volatile long i32_1, i32_2;
volatile long long i64_1, i64_2;
volatile float f1, f2;
volatile double d1, d2;
_Static_assert(sizeof(int) == 2, "Assumption failed");
_Static_assert(sizeof(long) == 4, "Assumption failed");
_Static_assert(sizeof(long long) == 8, "Assumption failed");
void complex_i16_arg_first(int _Complex x, int n) {
// CHECK-LABEL: @complex_i16_arg_first
i16_1 = __real__ x;
// CHECK-DAG: mov r12, &i16_1
i16_2 = __imag__ x;
// CHECK-DAG: mov r13, &i16_2
N = n;
// CHECK-DAG: mov r14, &N
// CHECK: ret
}
void complex_i16_arg_second(int n, int _Complex x) {
// CHECK-LABEL: @complex_i16_arg_second
N = n;
// CHECK-DAG: mov r12, &N
i16_1 = __real__ x;
// CHECK-DAG: mov r13, &i16_1
i16_2 = __imag__ x;
// CHECK-DAG: mov r14, &i16_2
// CHECK: ret
}
void complex_i32_arg_first(long _Complex x, int n) {
// CHECK-LABEL: @complex_i32_arg_first
i32_1 = __real__ x;
// CHECK-DAG: mov r12, &i32_1
// CHECK-DAG: mov r13, &i32_1+2
i32_2 = __imag__ x;
// CHECK-DAG: mov r14, &i32_2
// CHECK-DAG: mov r15, &i32_2+2
N = n;
// CHECK-DAG: mov 2(r1), &N
// CHECK: ret
}
void complex_i32_arg_second(int n, long _Complex x) {
// CHECK-LABEL: @complex_i32_arg_second
N = n;
// CHECK-DAG: mov r12, &N
i32_1 = __real__ x;
// CHECK-DAG: mov 2(r1), &i32_1
// CHECK-DAG: mov 4(r1), &i32_1+2
i32_2 = __imag__ x;
// CHECK-DAG: mov 6(r1), &i32_2
// CHECK-DAG: mov 8(r1), &i32_2+2
// CHECK: ret
}
void complex_i64_arg_first(long long _Complex x, int n) {
// CHECK-LABEL: @complex_i64_arg_first
i64_1 = __real__ x;
// CHECK-DAG: mov 2(r1), &i64_1
// CHECK-DAG: mov 4(r1), &i64_1+2
// CHECK-DAG: mov 6(r1), &i64_1+4
// CHECK-DAG: mov 8(r1), &i64_1+6
i64_2 = __imag__ x;
// CHECK-DAG: mov 10(r1), &i64_2
// CHECK-DAG: mov 12(r1), &i64_2+2
// CHECK-DAG: mov 14(r1), &i64_2+4
// CHECK-DAG: mov 16(r1), &i64_2+6
N = n;
// CHECK-DAG: mov r12, &N
// CHECK: ret
}
void complex_i64_arg_second(int n, long long _Complex x) {
// CHECK-LABEL: @complex_i64_arg_second
N = n;
// CHECK-DAG: mov r12, &N
i64_1 = __real__ x;
// CHECK-DAG: mov 2(r1), &i64_1
// CHECK-DAG: mov 4(r1), &i64_1+2
// CHECK-DAG: mov 6(r1), &i64_1+4
// CHECK-DAG: mov 8(r1), &i64_1+6
i64_2 = __imag__ x;
// CHECK-DAG: mov 10(r1), &i64_2
// CHECK-DAG: mov 12(r1), &i64_2+2
// CHECK-DAG: mov 14(r1), &i64_2+4
// CHECK-DAG: mov 16(r1), &i64_2+6
// CHECK: ret
}
void complex_float_arg_first(float _Complex x, int n) {
// CHECK-LABEL: @complex_float_arg_first
f1 = __real__ x;
// CHECK-DAG: mov r12, &f1
// CHECK-DAG: mov r13, &f1+2
f2 = __imag__ x;
// CHECK-DAG: mov r14, &f2
// CHECK-DAG: mov r15, &f2+2
N = n;
// CHECK-DAG: mov 2(r1), &N
// CHECK: ret
}
void complex_float_arg_second(int n, float _Complex x) {
// CHECK-LABEL: @complex_float_arg_second
N = n;
// CHECK-DAG: mov r12, &N
f1 = __real__ x;
// CHECK-DAG: mov 2(r1), &f1
// CHECK-DAG: mov 4(r1), &f1+2
f2 = __imag__ x;
// CHECK-DAG: mov 6(r1), &f2
// CHECK-DAG: mov 8(r1), &f2+2
// CHECK: ret
}
void complex_double_arg_first(double _Complex x, int n) {
// CHECK-LABEL: @complex_double_arg_first
d1 = __real__ x;
// CHECK-DAG: mov 2(r1), &d1
// CHECK-DAG: mov 4(r1), &d1+2
// CHECK-DAG: mov 6(r1), &d1+4
// CHECK-DAG: mov 8(r1), &d1+6
d2 = __imag__ x;
// CHECK-DAG: mov 10(r1), &d2
// CHECK-DAG: mov 12(r1), &d2+2
// CHECK-DAG: mov 14(r1), &d2+4
// CHECK-DAG: mov 16(r1), &d2+6
N = n;
// CHECK-DAG: mov r12, &N
// CHECK: ret
}
void complex_double_arg_second(int n, double _Complex x) {
// CHECK-LABEL: @complex_double_arg_second
d1 = __real__ x;
// CHECK-DAG: mov 2(r1), &d1
// CHECK-DAG: mov 4(r1), &d1+2
// CHECK-DAG: mov 6(r1), &d1+4
// CHECK-DAG: mov 8(r1), &d1+6
d2 = __imag__ x;
// CHECK-DAG: mov 10(r1), &d2
// CHECK-DAG: mov 12(r1), &d2+2
// CHECK-DAG: mov 14(r1), &d2+4
// CHECK-DAG: mov 16(r1), &d2+6
N = n;
// CHECK-DAG: mov r12, &N
// CHECK: ret
}
int _Complex complex_i16_res(void) {
// CHECK-LABEL: @complex_i16_res
int _Complex res;
__real__ res = 0x1122;
// CHECK-DAG: mov #4386, r12
__imag__ res = 0x3344;
// CHECK-DAG: mov #13124, r13
return res;
// CHECK: ret
}
long _Complex complex_i32_res(void) {
// CHECK-LABEL: @complex_i32_res
long _Complex res;
__real__ res = 0x11223344;
// CHECK-DAG: mov #13124, r12
// CHECK-DAG: mov #4386, r13
__imag__ res = 0x55667788;
// CHECK-DAG: mov #30600, r14
// CHECK-DAG: mov #21862, r15
return res;
// CHECK: ret
}
long long _Complex complex_i64_res(void) {
// CHECK-LABEL: @complex_i64_res
long long _Complex res;
__real__ res = 0x1122334455667788;
// CHECK-DAG: mov #30600, 0(r12)
// CHECK-DAG: mov #21862, 2(r12)
// CHECK-DAG: mov #13124, 4(r12)
// CHECK-DAG: mov #4386, 6(r12)
__imag__ res = 0x99aabbccddeeff00;
// CHECK-DAG: mov #-256, 8(r12)
// CHECK-DAG: mov #-8722, 10(r12)
// CHECK-DAG: mov #-17460, 12(r12)
// CHECK-DAG: mov #-26198, 14(r12)
return res;
// CHECK: ret
}
float _Complex complex_float_res(void) {
// CHECK-LABEL: @complex_float_res
float _Complex res;
__real__ res = 1;
// CHECK-DAG: clr r12
// CHECK-DAG: mov #16256, r13
__imag__ res = -1;
// CHECK-DAG: clr r14
// CHECK-DAG: mov #-16512, r15
return res;
// CHECK: ret
}
double _Complex complex_double_res(void) {
// CHECK-LABEL: @complex_double_res
double _Complex res;
__real__ res = 1;
// CHECK-DAG: clr 0(r12)
// CHECK-DAG: clr 2(r12)
// CHECK-DAG: clr 4(r12)
// CHECK-DAG: mov #16368, 6(r12)
__imag__ res = -1;
// CHECK-DAG: clr 8(r12)
// CHECK-DAG: clr 10(r12)
// CHECK-DAG: clr 12(r12)
// CHECK-DAG: mov #-16400, 14(r12)
return res;
// CHECK: ret
}