227 lines · c
1// REQUIRES: msp430-registered-target2// RUN: %clang -target msp430 -Os -S -o- %s | FileCheck %s3 4volatile int N;5volatile int i16_1, i16_2;6volatile long i32_1, i32_2;7volatile long long i64_1, i64_2;8volatile float f1, f2;9volatile double d1, d2;10 11_Static_assert(sizeof(int) == 2, "Assumption failed");12_Static_assert(sizeof(long) == 4, "Assumption failed");13_Static_assert(sizeof(long long) == 8, "Assumption failed");14 15void complex_i16_arg_first(int _Complex x, int n) {16// CHECK-LABEL: @complex_i16_arg_first17 i16_1 = __real__ x;18// CHECK-DAG: mov r12, &i16_119 i16_2 = __imag__ x;20// CHECK-DAG: mov r13, &i16_221 N = n;22// CHECK-DAG: mov r14, &N23// CHECK: ret24}25 26void complex_i16_arg_second(int n, int _Complex x) {27// CHECK-LABEL: @complex_i16_arg_second28 N = n;29// CHECK-DAG: mov r12, &N30 i16_1 = __real__ x;31// CHECK-DAG: mov r13, &i16_132 i16_2 = __imag__ x;33// CHECK-DAG: mov r14, &i16_234// CHECK: ret35}36 37void complex_i32_arg_first(long _Complex x, int n) {38// CHECK-LABEL: @complex_i32_arg_first39 i32_1 = __real__ x;40// CHECK-DAG: mov r12, &i32_141// CHECK-DAG: mov r13, &i32_1+242 i32_2 = __imag__ x;43// CHECK-DAG: mov r14, &i32_244// CHECK-DAG: mov r15, &i32_2+245 N = n;46// CHECK-DAG: mov 2(r1), &N47// CHECK: ret48}49 50void complex_i32_arg_second(int n, long _Complex x) {51// CHECK-LABEL: @complex_i32_arg_second52 N = n;53// CHECK-DAG: mov r12, &N54 i32_1 = __real__ x;55// CHECK-DAG: mov 2(r1), &i32_156// CHECK-DAG: mov 4(r1), &i32_1+257 i32_2 = __imag__ x;58// CHECK-DAG: mov 6(r1), &i32_259// CHECK-DAG: mov 8(r1), &i32_2+260// CHECK: ret61}62 63void complex_i64_arg_first(long long _Complex x, int n) {64// CHECK-LABEL: @complex_i64_arg_first65 i64_1 = __real__ x;66// CHECK-DAG: mov 2(r1), &i64_167// CHECK-DAG: mov 4(r1), &i64_1+268// CHECK-DAG: mov 6(r1), &i64_1+469// CHECK-DAG: mov 8(r1), &i64_1+670 i64_2 = __imag__ x;71// CHECK-DAG: mov 10(r1), &i64_272// CHECK-DAG: mov 12(r1), &i64_2+273// CHECK-DAG: mov 14(r1), &i64_2+474// CHECK-DAG: mov 16(r1), &i64_2+675 N = n;76// CHECK-DAG: mov r12, &N77// CHECK: ret78}79 80void complex_i64_arg_second(int n, long long _Complex x) {81// CHECK-LABEL: @complex_i64_arg_second82 N = n;83// CHECK-DAG: mov r12, &N84 i64_1 = __real__ x;85// CHECK-DAG: mov 2(r1), &i64_186// CHECK-DAG: mov 4(r1), &i64_1+287// CHECK-DAG: mov 6(r1), &i64_1+488// CHECK-DAG: mov 8(r1), &i64_1+689 i64_2 = __imag__ x;90// CHECK-DAG: mov 10(r1), &i64_291// CHECK-DAG: mov 12(r1), &i64_2+292// CHECK-DAG: mov 14(r1), &i64_2+493// CHECK-DAG: mov 16(r1), &i64_2+694// CHECK: ret95}96 97void complex_float_arg_first(float _Complex x, int n) {98// CHECK-LABEL: @complex_float_arg_first99 f1 = __real__ x;100// CHECK-DAG: mov r12, &f1101// CHECK-DAG: mov r13, &f1+2102 f2 = __imag__ x;103// CHECK-DAG: mov r14, &f2104// CHECK-DAG: mov r15, &f2+2105 N = n;106// CHECK-DAG: mov 2(r1), &N107// CHECK: ret108}109 110void complex_float_arg_second(int n, float _Complex x) {111// CHECK-LABEL: @complex_float_arg_second112 N = n;113// CHECK-DAG: mov r12, &N114 f1 = __real__ x;115// CHECK-DAG: mov 2(r1), &f1116// CHECK-DAG: mov 4(r1), &f1+2117 f2 = __imag__ x;118// CHECK-DAG: mov 6(r1), &f2119// CHECK-DAG: mov 8(r1), &f2+2120// CHECK: ret121}122 123void complex_double_arg_first(double _Complex x, int n) {124// CHECK-LABEL: @complex_double_arg_first125 d1 = __real__ x;126// CHECK-DAG: mov 2(r1), &d1127// CHECK-DAG: mov 4(r1), &d1+2128// CHECK-DAG: mov 6(r1), &d1+4129// CHECK-DAG: mov 8(r1), &d1+6130 d2 = __imag__ x;131// CHECK-DAG: mov 10(r1), &d2132// CHECK-DAG: mov 12(r1), &d2+2133// CHECK-DAG: mov 14(r1), &d2+4134// CHECK-DAG: mov 16(r1), &d2+6135 N = n;136// CHECK-DAG: mov r12, &N137// CHECK: ret138}139 140void complex_double_arg_second(int n, double _Complex x) {141// CHECK-LABEL: @complex_double_arg_second142 d1 = __real__ x;143// CHECK-DAG: mov 2(r1), &d1144// CHECK-DAG: mov 4(r1), &d1+2145// CHECK-DAG: mov 6(r1), &d1+4146// CHECK-DAG: mov 8(r1), &d1+6147 d2 = __imag__ x;148// CHECK-DAG: mov 10(r1), &d2149// CHECK-DAG: mov 12(r1), &d2+2150// CHECK-DAG: mov 14(r1), &d2+4151// CHECK-DAG: mov 16(r1), &d2+6152 N = n;153// CHECK-DAG: mov r12, &N154// CHECK: ret155}156 157int _Complex complex_i16_res(void) {158// CHECK-LABEL: @complex_i16_res159 int _Complex res;160 __real__ res = 0x1122;161// CHECK-DAG: mov #4386, r12162 __imag__ res = 0x3344;163// CHECK-DAG: mov #13124, r13164 return res;165// CHECK: ret166}167 168long _Complex complex_i32_res(void) {169// CHECK-LABEL: @complex_i32_res170 long _Complex res;171 __real__ res = 0x11223344;172// CHECK-DAG: mov #13124, r12173// CHECK-DAG: mov #4386, r13174 __imag__ res = 0x55667788;175// CHECK-DAG: mov #30600, r14176// CHECK-DAG: mov #21862, r15177 return res;178// CHECK: ret179}180 181long long _Complex complex_i64_res(void) {182// CHECK-LABEL: @complex_i64_res183 long long _Complex res;184 __real__ res = 0x1122334455667788;185// CHECK-DAG: mov #30600, 0(r12)186// CHECK-DAG: mov #21862, 2(r12)187// CHECK-DAG: mov #13124, 4(r12)188// CHECK-DAG: mov #4386, 6(r12)189 __imag__ res = 0x99aabbccddeeff00;190// CHECK-DAG: mov #-256, 8(r12)191// CHECK-DAG: mov #-8722, 10(r12)192// CHECK-DAG: mov #-17460, 12(r12)193// CHECK-DAG: mov #-26198, 14(r12)194 return res;195// CHECK: ret196}197 198float _Complex complex_float_res(void) {199// CHECK-LABEL: @complex_float_res200 float _Complex res;201 __real__ res = 1;202// CHECK-DAG: clr r12203// CHECK-DAG: mov #16256, r13204 __imag__ res = -1;205// CHECK-DAG: clr r14206// CHECK-DAG: mov #-16512, r15207 return res;208// CHECK: ret209}210 211double _Complex complex_double_res(void) {212// CHECK-LABEL: @complex_double_res213 double _Complex res;214 __real__ res = 1;215// CHECK-DAG: clr 0(r12)216// CHECK-DAG: clr 2(r12)217// CHECK-DAG: clr 4(r12)218// CHECK-DAG: mov #16368, 6(r12)219 __imag__ res = -1;220// CHECK-DAG: clr 8(r12)221// CHECK-DAG: clr 10(r12)222// CHECK-DAG: clr 12(r12)223// CHECK-DAG: mov #-16400, 14(r12)224 return res;225// CHECK: ret226}227