Home | History | Annotate | Download | only in arm-neon-tests
      1 /*
      2 
      3 Copyright (c) 2009, 2010, 2011 STMicroelectronics
      4 Written by Christophe Lyon
      5 
      6 Permission is hereby granted, free of charge, to any person obtaining a copy
      7 of this software and associated documentation files (the "Software"), to deal
      8 in the Software without restriction, including without limitation the rights
      9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     10 copies of the Software, and to permit persons to whom the Software is
     11 furnished to do so, subject to the following conditions:
     12 
     13 The above copyright notice and this permission notice shall be included in
     14 all copies or substantial portions of the Software.
     15 
     16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     22 THE SOFTWARE.
     23 
     24 */
     25 
     26 #if defined(__cplusplus)
     27 #include <cstdio>
     28 #include <cstdint>
     29 #else
     30 #include <stdio.h>
     31 #if defined(_MSC_VER)
     32 #include "msstdint.h"
     33 #else
     34 #include <stdint.h>
     35 #endif
     36 #endif
     37 
     38 #if defined(__arm__) || defined(__aarch64__)
     39 #include <dspfns.h>
     40 #else
     41 #include "stm-dspfns.h"
     42 #endif
     43 
     44 extern FILE* ref_file;
     45 
     46 #define __xSTR(X) #X
     47 #define __STR(X) __xSTR(X)
     48 
     49 #define FN(X) X, __STR(X)
     50 
     51 typedef int32_t func32_32_32_ptr(int32_t, int32_t);
     52 typedef int16_t func16_32_ptr(int32_t);
     53 typedef int32_t func32_32_16_16_ptr(int32_t, int16_t, int16_t);
     54 
     55 void test_16_fn_32(func16_32_ptr func, const char* func_name,
     56 		   int init_Overflow, int init_Carry)
     57 {
     58   int32_t svar32_a;
     59   int16_t svar16_a;
     60 
     61   fprintf(ref_file, "Checking %s with input Overflow=%d and input Carry=%d\n",
     62 	  func_name, init_Overflow, init_Carry);
     63 
     64   svar32_a = 1;
     65   Overflow = init_Overflow;
     66   Carry = init_Carry;
     67   svar16_a = func(svar32_a);
     68   fprintf(ref_file, "%s(%#x) = %#x overflow %d carry %d\n",
     69 	  func_name, svar32_a, svar16_a, Overflow, Carry);
     70 
     71   svar32_a = -1;
     72   Overflow = init_Overflow;
     73   Carry = init_Carry;
     74   svar16_a = func(svar32_a);
     75   fprintf(ref_file, "%s(%#x) = %#x overflow %d carry %d\n",
     76 	  func_name, svar32_a, svar16_a, Overflow, Carry);
     77 
     78   svar32_a = 32768;
     79   Overflow = init_Overflow;
     80   Carry = init_Carry;
     81   svar16_a = func(svar32_a);
     82   fprintf(ref_file, "%s(%#x) = %#x overflow %d carry %d\n",
     83 	  func_name, svar32_a, svar16_a, Overflow, Carry);
     84 
     85   svar32_a = -32768;
     86   Overflow = init_Overflow;
     87   Carry = init_Carry;
     88   svar16_a = func(svar32_a);
     89   fprintf(ref_file, "%s(%#x) = %#x overflow %d carry %d\n",
     90 	  func_name, svar32_a, svar16_a, Overflow, Carry);
     91 
     92   svar32_a = -32769;
     93   Overflow = init_Overflow;
     94   Carry = init_Carry;
     95   svar16_a = func(svar32_a);
     96   fprintf(ref_file, "%s(%#x) = %#x overflow %d carry %d\n",
     97 	  func_name, svar32_a, svar16_a, Overflow, Carry);
     98 }
     99 
    100 void test_32_fn_32_32(func32_32_32_ptr func, const char* func_name,
    101 		      int init_Overflow, int init_Carry)
    102 {
    103   int32_t svar32_a, svar32_b, svar32_c;
    104 
    105   fprintf(ref_file, "Checking %s with input Overflow=%d and input Carry=%d\n",
    106 	  func_name, init_Overflow, init_Carry);
    107 
    108   svar32_a = 1;
    109   svar32_b = 2;
    110   Overflow = init_Overflow;
    111   Carry = init_Carry;
    112   svar32_c = func(svar32_a, svar32_b);
    113   fprintf(ref_file, "%s(%#x, %#x) = %#x overflow %d carry %d\n",
    114 	  func_name, svar32_a, svar32_b, svar32_c, Overflow, Carry);
    115 
    116   svar32_a = -1;
    117   svar32_b = -2;
    118   Overflow = init_Overflow;
    119   Carry = init_Carry;
    120   svar32_c = func(svar32_a, svar32_b);
    121   fprintf(ref_file, "%s(%#x, %#x) = %#x overflow %d carry %d\n",
    122 	  func_name, svar32_a, svar32_b, svar32_c, Overflow, Carry);
    123 
    124   svar32_a = -1;
    125   svar32_b = 2;
    126   Overflow = init_Overflow;
    127   Carry = init_Carry;
    128   svar32_c = func(svar32_a, svar32_b);
    129   fprintf(ref_file, "%s(%#x, %#x) = %#x overflow %d carry %d\n",
    130 	  func_name, svar32_a, svar32_b, svar32_c, Overflow, Carry);
    131 
    132   svar32_a = 0x7000;
    133   svar32_b = 0x7000;
    134   Overflow = init_Overflow;
    135   Carry = init_Carry;
    136   svar32_c = func(svar32_a, svar32_b);
    137   fprintf(ref_file, "%s(%#x, %#x) = %#x overflow %d carry %d\n",
    138 	  func_name, svar32_a, svar32_b, svar32_c, Overflow, Carry);
    139 
    140   svar32_a = 0x8FFF;
    141   svar32_b = 0x8FFF;
    142   Overflow = init_Overflow;
    143   Carry = init_Carry;
    144   svar32_c = func(svar32_a, svar32_b);
    145   fprintf(ref_file, "%s(%#x, %#x) = %#x overflow %d carry %d\n",
    146 	  func_name, svar32_a, svar32_b, svar32_c, Overflow, Carry);
    147 
    148   svar32_a = 0x70000000;
    149   svar32_b = 0x70000000;
    150   Overflow = init_Overflow;
    151   Carry = init_Carry;
    152   svar32_c = func(svar32_a, svar32_b);
    153   fprintf(ref_file, "%s(%#x, %#x) = %#x overflow %d carry %d\n",
    154 	  func_name, svar32_a, svar32_b, svar32_c, Overflow, Carry);
    155 
    156   svar32_a = 0x8FFFFFFF;
    157   svar32_b = 0x8FFFFFFF;
    158   Overflow = init_Overflow;
    159   Carry = init_Carry;
    160   svar32_c = func(svar32_a, svar32_b);
    161   fprintf(ref_file, "%s(%#x, %#x) = %#x overflow %d carry %d\n",
    162 	  func_name, svar32_a, svar32_b, svar32_c, Overflow, Carry);
    163 
    164   svar32_a = 0x8FFFFFFF;
    165   svar32_b = 0xFFFFFFFF;
    166   Overflow = init_Overflow;
    167   Carry = init_Carry;
    168   svar32_c = func(svar32_a, svar32_b);
    169   fprintf(ref_file, "%s(%#x, %#x) = %#x overflow %d carry %d\n",
    170 	  func_name, svar32_a, svar32_b, svar32_c, Overflow, Carry);
    171 }
    172 
    173 void test_32_fn_32_16_16(func32_32_16_16_ptr func, const char* func_name,
    174 		      int init_Overflow, int init_Carry)
    175 {
    176   int32_t svar32_a, svar32_b;
    177   int16_t svar16_a, svar16_b;
    178 
    179   fprintf(ref_file, "Checking %s with input Overflow=%d and input Carry=%d\n",
    180 	  func_name, init_Overflow, init_Carry);
    181 
    182   svar16_a = 2;
    183   svar16_b = 2;
    184   svar32_a = 0x1234;
    185   Overflow = 0;
    186   Carry = init_Carry;
    187   svar32_b = func(svar32_a, svar16_a, svar16_b);
    188   fprintf(ref_file, "%s(%#x, %#x, %#x) = %#x overflow %d carry %d\n",
    189 	  func_name, svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    190 
    191   svar16_a = -1;
    192   svar16_b = -1;
    193   Overflow = 0;
    194   Carry = init_Carry;
    195   svar32_b = func(svar32_a, svar16_a, svar16_b);
    196   fprintf(ref_file, "%s(%#x, %#x, %#x) = %#x overflow %d carry %d\n",
    197 	  func_name, svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    198 
    199   svar16_a = 0x8000;
    200   svar16_b = 0x8000;
    201   Overflow = 0;
    202   Carry = init_Carry;
    203   svar32_b = func(svar32_a, svar16_a, svar16_b);
    204   fprintf(ref_file, "%s(%#x, %#x, %#x) = %#x overflow %d carry %d\n",
    205 	  func_name, svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    206 
    207   svar16_a = 0x8000;
    208   svar16_b = 0x8000;
    209   Overflow = 0;
    210   Carry = init_Carry;
    211   svar32_a = -1;
    212   svar32_b = func(svar32_a, svar16_a, svar16_b);
    213   fprintf(ref_file, "%s(%#x, %#x, %#x) = %#x overflow %d carry %d\n",
    214 	  func_name, svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    215 }
    216 
    217 void exec_dspfns1 (int init_Overflow, int init_Carry)
    218 {
    219   int32_t svar32_a, svar32_b, svar32_c;
    220   int16_t svar16_a, svar16_b, svar16_c;
    221 
    222 
    223   fprintf(ref_file, "\n\nDSP FNS (non-NEON/ITU) intrinsics with input Overflow=%d and input Carry=%d\n", init_Overflow, init_Carry);
    224 
    225   /* saturate */
    226   /* int16_t saturate(int32_t x) */
    227   test_16_fn_32(FN(saturate), init_Overflow, init_Carry);
    228 
    229 
    230   /* add */
    231   /* int16_t add(int16_t x, int16_t y) */
    232   svar16_a = 1;
    233   svar16_b = 1;
    234   Overflow = init_Overflow;
    235   Carry = init_Carry;
    236   svar16_c = add(svar16_a, svar16_b);
    237   fprintf(ref_file, "add(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    238 
    239   svar16_a = -1;
    240   svar16_b = -1;
    241   Overflow = init_Overflow;
    242   Carry = init_Carry;
    243   svar16_c = add(svar16_a, svar16_b);
    244   fprintf(ref_file, "add(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    245 
    246   svar16_a = 20000;
    247   svar16_b = 20000;
    248   Overflow = init_Overflow;
    249   Carry = init_Carry;
    250   svar16_c = add(svar16_a, svar16_b);
    251   fprintf(ref_file, "add(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    252 
    253   svar16_a = -20000;
    254   svar16_b = -20000;
    255   Overflow = init_Overflow;
    256   Carry = init_Carry;
    257   svar16_c = add(svar16_a, svar16_b);
    258   fprintf(ref_file, "add(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    259 
    260 
    261   /* sub */
    262   /* int16_t sub(int16_t x, int16_t y) */
    263   svar16_a = 1;
    264   svar16_b = 1;
    265   Overflow = init_Overflow;
    266   Carry = init_Carry;
    267   svar16_c = sub(svar16_a, svar16_b);
    268   fprintf(ref_file, "sub(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    269 
    270   svar16_a = -1;
    271   svar16_b = -1;
    272   Overflow = init_Overflow;
    273   Carry = init_Carry;
    274   svar16_c = sub(svar16_a, svar16_b);
    275   fprintf(ref_file, "sub(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    276 
    277   svar16_a = 20000;
    278   svar16_b = 20000;
    279   Overflow = init_Overflow;
    280   Carry = init_Carry;
    281   svar16_c = sub(svar16_a, svar16_b);
    282   fprintf(ref_file, "sub(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    283 
    284   svar16_a = -20000;
    285   svar16_b = -20000;
    286   Overflow = init_Overflow;
    287   Carry = init_Carry;
    288   svar16_c = sub(svar16_a, svar16_b);
    289   fprintf(ref_file, "sub(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    290 
    291   svar16_a = 0;
    292   svar16_b = -32768;
    293   Overflow = init_Overflow;
    294   Carry = init_Carry;
    295   svar16_c = sub(svar16_a, svar16_b);
    296   fprintf(ref_file, "sub(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    297 
    298 
    299   /* abs_s */
    300   /* int16_t abs_s(int16_t x) */
    301   svar16_b = 1;
    302   Overflow = init_Overflow;
    303   Carry = init_Carry;
    304   svar16_a = abs_s(svar16_b);
    305   fprintf(ref_file, "abs_s(%#x) = %#x overflow %d carry %d\n", svar16_b, svar16_a, Overflow, Carry);
    306 
    307   svar16_b = -1;
    308   Overflow = init_Overflow;
    309   Carry = init_Carry;
    310   svar16_a = abs_s(svar16_b);
    311   fprintf(ref_file, "abs_s(%#x) = %#x overflow %d carry %d\n", svar16_b, svar16_a, Overflow, Carry);
    312 
    313   svar16_b = -32768;
    314   Overflow = init_Overflow;
    315   Carry = init_Carry;
    316   svar16_a = abs_s(svar16_b);
    317   fprintf(ref_file, "abs_s(%#x) = %#x overflow %d carry %d\n", svar16_b, svar16_a, Overflow, Carry);
    318 
    319 
    320   /* shl */
    321   /* int16_t shl(int16_t x, int16_t y) */
    322   svar16_a = 1;
    323   svar16_b = 1;
    324   Overflow = init_Overflow;
    325   Carry = init_Carry;
    326   svar16_c = shl(svar16_a, svar16_b);
    327   fprintf(ref_file, "shl(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    328 
    329   svar16_a = 10;
    330   svar16_b = 1;
    331   Overflow = init_Overflow;
    332   Carry = init_Carry;
    333   svar16_c = shl(svar16_a, svar16_b);
    334   fprintf(ref_file, "shl(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    335 
    336   svar16_a = 0xFFF;
    337   svar16_b = 10;
    338   Overflow = init_Overflow;
    339   Carry = init_Carry;
    340   svar16_c = shl(svar16_a, svar16_b);
    341   fprintf(ref_file, "shl(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    342 
    343   svar16_a = 0xFFF;
    344   svar16_b = 20;
    345   Overflow = init_Overflow;
    346   Carry = init_Carry;
    347   svar16_c = shl(svar16_a, svar16_b);
    348   fprintf(ref_file, "shl(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    349 
    350   svar16_a = 1;
    351   svar16_b = -1;
    352   Overflow = init_Overflow;
    353   Carry = init_Carry;
    354   svar16_c = shl(svar16_a, svar16_b);
    355   fprintf(ref_file, "shl(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    356 
    357   svar16_a = 20;
    358   svar16_b = -1;
    359   Overflow = init_Overflow;
    360   Carry = init_Carry;
    361   svar16_c = shl(svar16_a, svar16_b);
    362   fprintf(ref_file, "shl(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    363 
    364   svar16_a = 0xFFF;
    365   svar16_b = -10;
    366   Overflow = init_Overflow;
    367   Carry = init_Carry;
    368   svar16_c = shl(svar16_a, svar16_b);
    369   fprintf(ref_file, "shl(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    370 
    371   svar16_a = 0xFFF;
    372   svar16_b = -64;
    373   Overflow = init_Overflow;
    374   Carry = init_Carry;
    375   svar16_c = shl(svar16_a, svar16_b);
    376   fprintf(ref_file, "shl(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    377 
    378 
    379   /* shr */
    380   /* int16_t shr(int16_t x, int16_t y) */
    381   svar16_a = 1;
    382   svar16_b = -1;
    383   Overflow = init_Overflow;
    384   Carry = init_Carry;
    385   svar16_c = shr(svar16_a, svar16_b);
    386   fprintf(ref_file, "shr(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    387 
    388   svar16_a = 10;
    389   svar16_b = -1;
    390   Overflow = init_Overflow;
    391   Carry = init_Carry;
    392   svar16_c = shr(svar16_a, svar16_b);
    393   fprintf(ref_file, "shr(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    394 
    395   svar16_a = 0xFFF;
    396   svar16_b = -10;
    397   Overflow = init_Overflow;
    398   Carry = init_Carry;
    399   svar16_c = shr(svar16_a, svar16_b);
    400   fprintf(ref_file, "shr(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    401 
    402   svar16_a = 0xFFF;
    403   svar16_b = -20;
    404   Overflow = init_Overflow;
    405   Carry = init_Carry;
    406   svar16_c = shr(svar16_a, svar16_b);
    407   fprintf(ref_file, "shr(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    408 
    409   svar16_a = 1;
    410   svar16_b = 1;
    411   Overflow = init_Overflow;
    412   Carry = init_Carry;
    413   svar16_c = shr(svar16_a, svar16_b);
    414   fprintf(ref_file, "shr(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    415 
    416   svar16_a = 20;
    417   svar16_b = 1;
    418   Overflow = init_Overflow;
    419   Carry = init_Carry;
    420   svar16_c = shr(svar16_a, svar16_b);
    421   fprintf(ref_file, "shr(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    422 
    423   svar16_a = 0xFFF;
    424   svar16_b = 10;
    425   Overflow = init_Overflow;
    426   Carry = init_Carry;
    427   svar16_c = shr(svar16_a, svar16_b);
    428   fprintf(ref_file, "shr(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    429 
    430   svar16_a = 0xFFF;
    431   svar16_b = 64;
    432   Overflow = init_Overflow;
    433   Carry = init_Carry;
    434   svar16_c = shr(svar16_a, svar16_b);
    435   fprintf(ref_file, "shr(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    436 
    437 
    438   /* mult */
    439   /* int16_t mult(int16_t x, int16_t y) */
    440   svar16_a = 2;
    441   svar16_b = 2;
    442   Overflow = init_Overflow;
    443   Carry = init_Carry;
    444   svar16_c = mult(svar16_a, svar16_b);
    445   fprintf(ref_file, "mult(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    446 
    447   svar16_a = -1;
    448   svar16_b = -1;
    449   Overflow = init_Overflow;
    450   Carry = init_Carry;
    451   svar16_c = mult(svar16_a, svar16_b);
    452   fprintf(ref_file, "mult(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    453 
    454   svar16_a = 0x8000;
    455   svar16_b = 0x8000;
    456   Overflow = init_Overflow;
    457   Carry = init_Carry;
    458   svar16_c = mult(svar16_a, svar16_b);
    459   fprintf(ref_file, "mult(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    460 
    461 
    462   /* L_mult */
    463   /* int32_t L_mult(int16_t x, int16_t y) */
    464   svar16_a = 2;
    465   svar16_b = 2;
    466   Overflow = init_Overflow;
    467   Carry = init_Carry;
    468   svar32_a = L_mult(svar16_a, svar16_b);
    469   fprintf(ref_file, "L_mult(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar32_a, Overflow, Carry);
    470 
    471   svar16_a = -1;
    472   svar16_b = -1;
    473   Overflow = init_Overflow;
    474   Carry = init_Carry;
    475   svar32_a = L_mult(svar16_a, svar16_b);
    476   fprintf(ref_file, "L_mult(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar32_a, Overflow, Carry);
    477 
    478   svar16_a = 0x8000;
    479   svar16_b = 0x8000;
    480   Overflow = init_Overflow;
    481   Carry = init_Carry;
    482   svar32_a = L_mult(svar16_a, svar16_b);
    483   fprintf(ref_file, "L_mult(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar32_a, Overflow, Carry);
    484 
    485 
    486   /* negate */
    487   /* int16_t negate(int16_t x) */
    488   svar16_b = 1;
    489   Overflow = init_Overflow;
    490   Carry = init_Carry;
    491   svar16_a = negate(svar16_b);
    492   fprintf(ref_file, "negate(%#x) = %#x overflow %d carry %d\n", svar16_b, svar16_a, Overflow, Carry);
    493 
    494   svar16_b = -1;
    495   Overflow = init_Overflow;
    496   Carry = init_Carry;
    497   svar16_a = negate(svar16_b);
    498   fprintf(ref_file, "negate(%#x) = %#x overflow %d carry %d\n", svar16_b, svar16_a, Overflow, Carry);
    499 
    500   svar16_b = -32768;
    501   Overflow = init_Overflow;
    502   Carry = init_Carry;
    503   svar16_a = negate(svar16_b);
    504   fprintf(ref_file, "negate(%#x) = %#x overflow %d carry %d\n", svar16_b, svar16_a, Overflow, Carry);
    505 
    506 
    507   /* extract_h */
    508   /* int16_t extract_h(int32_t x) */
    509   svar32_a = 1;
    510   Overflow = init_Overflow;
    511   Carry = init_Carry;
    512   svar16_a = extract_h(svar32_a);
    513   fprintf(ref_file, "extract_h(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    514 
    515   svar32_a = -1;
    516   Overflow = init_Overflow;
    517   Carry = init_Carry;
    518   svar16_a = extract_h(svar32_a);
    519   fprintf(ref_file, "extract_h(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    520 
    521   svar32_a = -32768;
    522   Overflow = init_Overflow;
    523   Carry = init_Carry;
    524   svar16_a = extract_h(svar32_a);
    525   fprintf(ref_file, "extract_h(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    526 
    527   svar32_a = 0x12345678;
    528   Overflow = init_Overflow;
    529   Carry = init_Carry;
    530   svar16_a = extract_h(svar32_a);
    531   fprintf(ref_file, "extract_h(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    532 
    533 
    534   /* extract_l */
    535   /* int16_t extract_l(int32_t x) */
    536   svar32_a = 1;
    537   Overflow = init_Overflow;
    538   Carry = init_Carry;
    539   svar16_a = extract_l(svar32_a);
    540   fprintf(ref_file, "extract_l(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    541 
    542   svar32_a = -1;
    543   Overflow = init_Overflow;
    544   Carry = init_Carry;
    545   svar16_a = extract_l(svar32_a);
    546   fprintf(ref_file, "extract_l(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    547 
    548   svar32_a = -32768;
    549   Overflow = init_Overflow;
    550   Carry = init_Carry;
    551   svar16_a = extract_l(svar32_a);
    552   fprintf(ref_file, "extract_l(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    553 
    554   svar32_a = 0x43218765;
    555   Overflow = init_Overflow;
    556   Carry = init_Carry;
    557   svar16_a = extract_l(svar32_a);
    558   fprintf(ref_file, "extract_l(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    559 
    560 
    561   /* round */
    562   /* int16_t round(int32_t x) */
    563   svar32_a = 1;
    564   Overflow = init_Overflow;
    565   Carry = init_Carry;
    566   svar16_a = round(svar32_a);
    567   fprintf(ref_file, "round(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    568 
    569   svar32_a = -1;
    570   Overflow = init_Overflow;
    571   Carry = init_Carry;
    572   svar16_a = round(svar32_a);
    573   fprintf(ref_file, "round(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    574 
    575   svar32_a = -32768;
    576   Overflow = init_Overflow;
    577   Carry = init_Carry;
    578   svar16_a = round(svar32_a);
    579   fprintf(ref_file, "round(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    580 
    581   svar32_a = 0x43218765;
    582   Overflow = init_Overflow;
    583   Carry = init_Carry;
    584   svar16_a = round(svar32_a);
    585   fprintf(ref_file, "round(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    586 
    587   svar32_a = 0x87654321;
    588   Overflow = init_Overflow;
    589   Carry = init_Carry;
    590   svar16_a = round(svar32_a);
    591   fprintf(ref_file, "round(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    592 
    593 
    594   /* L_mac */
    595   /* int32_t L_mac(int32_t acc, int16_t x, int16_t y) */
    596   svar16_a = 2;
    597   svar16_b = 2;
    598   svar32_a = 0x1234;
    599   Overflow = init_Overflow;
    600   Carry = init_Carry;
    601   svar32_b = L_mac(svar32_a, svar16_a, svar16_b);
    602   fprintf(ref_file, "L_mac(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    603 
    604   svar16_a = -1;
    605   svar16_b = -1;
    606   Overflow = init_Overflow;
    607   Carry = init_Carry;
    608   svar32_b = L_mac(svar32_a, svar16_a, svar16_b);
    609   fprintf(ref_file, "L_mac(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    610 
    611   svar16_a = 0x8000;
    612   svar16_b = 0x8000;
    613   Overflow = init_Overflow;
    614   Carry = init_Carry;
    615   svar32_b = L_mac(svar32_a, svar16_a, svar16_b);
    616   fprintf(ref_file, "L_mac(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    617 
    618   svar16_a = 0x8000;
    619   svar16_b = 0x8000;
    620   Overflow = init_Overflow;
    621   Carry = init_Carry;
    622   svar32_a = -1;
    623   svar32_b = L_mac(svar32_a, svar16_a, svar16_b);
    624   fprintf(ref_file, "L_mac(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    625 
    626 
    627   /* L_msu */
    628   /* int32_t L_msu(int32_t acc, int16_t x, int16_t y) */
    629   svar16_a = 2;
    630   svar16_b = 2;
    631   svar32_a = 0x1234;
    632   Overflow = init_Overflow;
    633   Carry = init_Carry;
    634   svar32_b = L_msu(svar32_a, svar16_a, svar16_b);
    635   fprintf(ref_file, "L_msu(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    636 
    637   svar16_a = -1;
    638   svar16_b = -1;
    639   Overflow = init_Overflow;
    640   Carry = init_Carry;
    641   svar32_b = L_msu(svar32_a, svar16_a, svar16_b);
    642   fprintf(ref_file, "L_msu(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    643 
    644   svar16_a = 0x8000;
    645   svar16_b = 0x8000;
    646   Overflow = init_Overflow;
    647   Carry = init_Carry;
    648   svar32_b = L_msu(svar32_a, svar16_a, svar16_b);
    649   fprintf(ref_file, "L_msu(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    650 
    651   svar16_a = 0x8000;
    652   svar16_b = 0x8000;
    653   svar32_a = 1;
    654   Overflow = init_Overflow;
    655   Carry = init_Carry;
    656   svar32_b = L_msu(svar32_a, svar16_a, svar16_b);
    657   fprintf(ref_file, "L_msu(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar32_b, Overflow, Carry);
    658 
    659 
    660   /* L_add */
    661   /* int32_t L_add(int32_t val1, int32_t val2); */
    662   svar32_a = 1;
    663   svar32_b = 2;
    664   Overflow = init_Overflow;
    665   Carry = init_Carry;
    666   svar32_c = L_add(svar32_a, svar32_b);
    667   fprintf(ref_file, "L_add(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    668 
    669   svar32_a = -1;
    670   svar32_b = -2;
    671   Overflow = init_Overflow;
    672   Carry = init_Carry;
    673   svar32_c = L_add(svar32_a, svar32_b);
    674   fprintf(ref_file, "L_add(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    675 
    676   svar32_a = -1;
    677   svar32_b = 2;
    678   Overflow = init_Overflow;
    679   Carry = init_Carry;
    680   svar32_c = L_add(svar32_a, svar32_b);
    681   fprintf(ref_file, "L_add(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    682 
    683   svar32_a = 0x7000;
    684   svar32_b = 0x7000;
    685   Overflow = init_Overflow;
    686   Carry = init_Carry;
    687   svar32_c = L_add(svar32_a, svar32_b);
    688   fprintf(ref_file, "L_add(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    689 
    690   svar32_a = 0x8FFF;
    691   svar32_b = 0x8FFF;
    692   Overflow = init_Overflow;
    693   Carry = init_Carry;
    694   svar32_c = L_add(svar32_a, svar32_b);
    695   fprintf(ref_file, "L_add(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    696 
    697   svar32_a = 0x70000000;
    698   svar32_b = 0x70000000;
    699   Overflow = init_Overflow;
    700   Carry = init_Carry;
    701   svar32_c = L_add(svar32_a, svar32_b);
    702   fprintf(ref_file, "L_add(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    703 
    704   svar32_a = 0x8FFFFFFF;
    705   svar32_b = 0x8FFFFFFF;
    706   Overflow = init_Overflow;
    707   Carry = init_Carry;
    708   svar32_c = L_add(svar32_a, svar32_b);
    709   fprintf(ref_file, "L_add(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    710 
    711   /* L_sub */
    712   /* int32_t L_sub(int32_t val1, int32_t val2); */
    713   svar32_a = 1;
    714   svar32_b = 2;
    715   Overflow = init_Overflow;
    716   Carry = init_Carry;
    717   svar32_c = L_sub(svar32_a, svar32_b);
    718   fprintf(ref_file, "L_sub(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    719 
    720   svar32_a = -1;
    721   svar32_b = -2;
    722   Overflow = init_Overflow;
    723   Carry = init_Carry;
    724   svar32_c = L_sub(svar32_a, svar32_b);
    725   fprintf(ref_file, "L_sub(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    726 
    727   svar32_a = -1;
    728   svar32_b = 2;
    729   Overflow = init_Overflow;
    730   Carry = init_Carry;
    731   svar32_c = L_sub(svar32_a, svar32_b);
    732   fprintf(ref_file, "L_sub(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    733 
    734   svar32_a = 0x7000;
    735   svar32_b = 0xFFFF9000;
    736   Overflow = init_Overflow;
    737   Carry = init_Carry;
    738   svar32_c = L_sub(svar32_a, svar32_b);
    739   fprintf(ref_file, "L_sub(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    740 
    741   svar32_a = 0x8FFF;
    742   svar32_b = 0xFFFF7001;
    743   Overflow = init_Overflow;
    744   Carry = init_Carry;
    745   svar32_c = L_sub(svar32_a, svar32_b);
    746   fprintf(ref_file, "L_sub(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    747 
    748   svar32_a = 0x70000000;
    749   svar32_b = 0x90000000;
    750   Overflow = init_Overflow;
    751   Carry = init_Carry;
    752   svar32_c = L_sub(svar32_a, svar32_b);
    753   fprintf(ref_file, "L_sub(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    754 
    755   svar32_a = 0x8FFFFFFF;
    756   svar32_b = 0x70000001;
    757   Overflow = init_Overflow;
    758   Carry = init_Carry;
    759   svar32_c = L_sub(svar32_a, svar32_b);
    760   fprintf(ref_file, "L_sub(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    761 
    762   svar32_a = 0;
    763   svar32_b = 0x80000000;
    764   Overflow = init_Overflow;
    765   Carry = init_Carry;
    766   svar32_c = L_sub(svar32_a, svar32_b);
    767   fprintf(ref_file, "L_sub(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    768 
    769 
    770   /* L_add_c */
    771   /* int32_t L_add_c(int32_t val1, int32_t val2); */
    772   test_32_fn_32_32(FN(L_add_c), init_Overflow, init_Carry);
    773 
    774 
    775 
    776   /* L_sub_c */
    777   /* int32_t L_sub_c(int32_t val1, int32_t val2); */
    778 #undef MYFN
    779 #define MYFN L_sub_c
    780   svar32_a = 1;
    781   svar32_b = 2;
    782   Overflow = init_Overflow;
    783   Carry = init_Carry;
    784   svar32_c = MYFN(svar32_a, svar32_b);
    785   fprintf(ref_file, __STR(MYFN) "(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    786 
    787   svar32_a = -1;
    788   svar32_b = -2;
    789   Overflow = init_Overflow;
    790   Carry = init_Carry;
    791   svar32_c = MYFN(svar32_a, svar32_b);
    792   fprintf(ref_file, __STR(MYFN) "(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    793 
    794   svar32_a = -1;
    795   svar32_b = 2;
    796   Overflow = init_Overflow;
    797   Carry = init_Carry;
    798   svar32_c = MYFN(svar32_a, svar32_b);
    799   fprintf(ref_file, __STR(MYFN) "(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    800 
    801   svar32_a = 0x7000;
    802   svar32_b = 0x7000;
    803   Overflow = init_Overflow;
    804   Carry = init_Carry;
    805   svar32_c = MYFN(svar32_a, svar32_b);
    806   fprintf(ref_file, __STR(MYFN) "(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    807 
    808   svar32_a = 0x8FFF;
    809   svar32_b = 0x8FFF;
    810   Overflow = init_Overflow;
    811   Carry = init_Carry;
    812   svar32_c = MYFN(svar32_a, svar32_b);
    813   fprintf(ref_file, __STR(MYFN) "(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    814 
    815   svar32_a = 0x70000000;
    816   svar32_b = 0x70000000;
    817   Overflow = init_Overflow;
    818   Carry = init_Carry;
    819   svar32_c = MYFN(svar32_a, svar32_b);
    820   fprintf(ref_file, __STR(MYFN) "(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    821 
    822   svar32_a = 0x8FFFFFFF;
    823   svar32_b = 0x8FFFFFFF;
    824   Overflow = init_Overflow;
    825   Carry = init_Carry;
    826   svar32_c = MYFN(svar32_a, svar32_b);
    827   fprintf(ref_file, __STR(MYFN) "(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    828 
    829   svar32_a = 0x1;
    830   svar32_b = 0x80000000;
    831   Overflow = init_Overflow;
    832   Carry = init_Carry;
    833   svar32_c = MYFN(svar32_a, svar32_b);
    834   fprintf(ref_file, __STR(MYFN) "(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    835 
    836   svar32_a = 0xFFFFFFFF;
    837   svar32_b = 0x7FFFFFFF;
    838   Overflow = init_Overflow;
    839   Carry = init_Carry;
    840   svar32_c = MYFN(svar32_a, svar32_b);
    841   fprintf(ref_file, __STR(MYFN) "(%#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar32_b, svar32_c, Overflow, Carry);
    842 
    843 
    844   /* L_macNs */
    845   /* int32_t L_macNs(int32_t acc, int16_t x, int16_t y) */
    846   test_32_fn_32_16_16(FN(L_macNs), init_Overflow, init_Carry);
    847 
    848   /* L_msuNs */
    849   /* int32_t L_msuNs(int32_t acc, int16_t x, int16_t y) */
    850   test_32_fn_32_16_16(FN(L_msuNs), init_Overflow, init_Carry);
    851 
    852 
    853   /* negate */
    854   /* int32_t negate(int32_t x) */
    855   svar32_b = 1;
    856   Overflow = init_Overflow;
    857   Carry = init_Carry;
    858   svar32_a = negate(svar32_b);
    859   fprintf(ref_file, "negate(%#x) = %#x overflow %d carry %d\n", svar32_b, svar32_a, Overflow, Carry);
    860 
    861   svar32_b = -1;
    862   Overflow = init_Overflow;
    863   Carry = init_Carry;
    864   svar32_a = negate(svar32_b);
    865   fprintf(ref_file, "negate(%#x) = %#x overflow %d carry %d\n", svar32_b, svar32_a, Overflow, Carry);
    866 
    867   svar32_b = -32768;
    868   Overflow = init_Overflow;
    869   Carry = init_Carry;
    870   svar32_a = negate(svar32_b);
    871   fprintf(ref_file, "negate(%#x) = %#x overflow %d carry %d\n", svar32_b, svar32_a, Overflow, Carry);
    872 
    873 
    874   /* mult_r */
    875   /* int16_t mult_r(int16_t x, int16_t y) */
    876   svar16_a = 2;
    877   svar16_b = 2;
    878   Overflow = init_Overflow;
    879   Carry = init_Carry;
    880   svar16_c = mult_r(svar16_a, svar16_b);
    881   fprintf(ref_file, "mult_r(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    882 
    883   svar16_a = -1;
    884   svar16_b = -1;
    885   Overflow = init_Overflow;
    886   Carry = init_Carry;
    887   svar16_c = mult_r(svar16_a, svar16_b);
    888   fprintf(ref_file, "mult_r(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    889 
    890   svar16_a = 0x8000;
    891   svar16_b = 0x8000;
    892   Overflow = init_Overflow;
    893   Carry = init_Carry;
    894   svar16_c = mult_r(svar16_a, svar16_b);
    895   fprintf(ref_file, "mult_r(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
    896 
    897 
    898   /* norm_s */
    899   /* int16_t norm_s(int32_t x) */
    900   svar32_a = 1;
    901   Overflow = init_Overflow;
    902   Carry = init_Carry;
    903   svar16_a = norm_s(svar32_a);
    904   fprintf(ref_file, "norm_s(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    905 
    906   svar32_a = -1;
    907   Overflow = init_Overflow;
    908   Carry = init_Carry;
    909   svar16_a = norm_s(svar32_a);
    910   fprintf(ref_file, "norm_s(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    911 
    912   svar32_a = -32768;
    913   Overflow = init_Overflow;
    914   Carry = init_Carry;
    915   svar16_a = norm_s(svar32_a);
    916   fprintf(ref_file, "norm_s(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    917 
    918   svar32_a = 12000;
    919   Overflow = init_Overflow;
    920   Carry = init_Carry;
    921   svar16_a = norm_s(svar32_a);
    922   fprintf(ref_file, "norm_s(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    923 
    924 
    925   /* norm_l */
    926   /* int16_t norm_l(int16_t x) */
    927   svar32_a = 1;
    928   Overflow = init_Overflow;
    929   Carry = init_Carry;
    930   svar16_a = norm_l(svar32_a);
    931   fprintf(ref_file, "norm_l(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    932 
    933   svar32_a = -1;
    934   Overflow = init_Overflow;
    935   Carry = init_Carry;
    936   svar16_a = norm_l(svar32_a);
    937   fprintf(ref_file, "norm_l(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    938 
    939   svar32_a = -32768;
    940   Overflow = init_Overflow;
    941   Carry = init_Carry;
    942   svar16_a = norm_l(svar32_a);
    943   fprintf(ref_file, "norm_l(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    944 
    945   svar32_a = 12000;
    946   Overflow = init_Overflow;
    947   Carry = init_Carry;
    948   svar16_a = norm_l(svar32_a);
    949   fprintf(ref_file, "norm_l(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    950 
    951   svar32_a = 0x123456;
    952   Overflow = init_Overflow;
    953   Carry = init_Carry;
    954   svar16_a = norm_l(svar32_a);
    955   fprintf(ref_file, "norm_l(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    956 
    957   svar32_a = 0xABCDEF;
    958   Overflow = init_Overflow;
    959   Carry = init_Carry;
    960   svar16_a = norm_l(svar32_a);
    961   fprintf(ref_file, "norm_l(%#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, Overflow, Carry);
    962 
    963 
    964   /* L_shl */
    965   /* int32_t L_shl(int32_t x, int16_t y) */
    966   svar32_a = 1;
    967   svar16_b = 1;
    968   Overflow = init_Overflow;
    969   Carry = init_Carry;
    970   svar32_c = L_shl(svar32_a, svar16_b);
    971   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
    972 
    973   svar32_a = 10;
    974   svar16_b = 1;
    975   Overflow = init_Overflow;
    976   Carry = init_Carry;
    977   svar32_c = L_shl(svar32_a, svar16_b);
    978   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
    979 
    980   svar32_a = 0xFFF;
    981   svar16_b = 10;
    982   Overflow = init_Overflow;
    983   Carry = init_Carry;
    984   svar32_c = L_shl(svar32_a, svar16_b);
    985   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
    986 
    987   svar32_a = 0xFFF;
    988   svar16_b = 20;
    989   Overflow = init_Overflow;
    990   Carry = init_Carry;
    991   svar32_c = L_shl(svar32_a, svar16_b);
    992   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
    993 
    994   svar32_a = 0x12345678;
    995   svar16_b = 2;
    996   Overflow = init_Overflow;
    997   Carry = init_Carry;
    998   svar32_c = L_shl(svar32_a, svar16_b);
    999   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1000 
   1001   svar32_a = 0x12345678;
   1002   svar16_b = 40;
   1003   Overflow = init_Overflow;
   1004   Carry = init_Carry;
   1005   svar32_c = L_shl(svar32_a, svar16_b);
   1006   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1007 
   1008   svar32_a = 1;
   1009   svar16_b = -1;
   1010   Overflow = init_Overflow;
   1011   Carry = init_Carry;
   1012   svar32_c = L_shl(svar32_a, svar16_b);
   1013   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1014 
   1015   svar32_a = 20;
   1016   svar16_b = -1;
   1017   Overflow = init_Overflow;
   1018   Carry = init_Carry;
   1019   svar32_c = L_shl(svar32_a, svar16_b);
   1020   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1021 
   1022   svar32_a = 0xFFF;
   1023   svar16_b = -10;
   1024   Overflow = init_Overflow;
   1025   Carry = init_Carry;
   1026   svar32_c = L_shl(svar32_a, svar16_b);
   1027   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1028 
   1029   svar32_a = 0xFFF;
   1030   svar16_b = -64;
   1031   Overflow = init_Overflow;
   1032   Carry = init_Carry;
   1033   svar32_c = L_shl(svar32_a, svar16_b);
   1034   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1035 
   1036   svar32_a = 0x12345678;
   1037   svar16_b = -10;
   1038   Overflow = init_Overflow;
   1039   Carry = init_Carry;
   1040   svar32_c = L_shl(svar32_a, svar16_b);
   1041   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1042 
   1043   svar32_a = 0x12345678;
   1044   svar16_b = -64;
   1045   Overflow = init_Overflow;
   1046   Carry = init_Carry;
   1047   svar32_c = L_shl(svar32_a, svar16_b);
   1048   fprintf(ref_file, "L_shl(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1049 
   1050 
   1051   /* L_shr */
   1052   /* int32_t L_shr(int32_t x, int16_t y) */
   1053   svar32_a = 1;
   1054   svar16_b = -1;
   1055   Overflow = init_Overflow;
   1056   Carry = init_Carry;
   1057   svar32_c = L_shr(svar32_a, svar16_b);
   1058   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1059 
   1060   svar32_a = 10;
   1061   svar16_b = -1;
   1062   Overflow = init_Overflow;
   1063   Carry = init_Carry;
   1064   svar32_c = L_shr(svar32_a, svar16_b);
   1065   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1066 
   1067   svar32_a = 0xFFF;
   1068   svar16_b = -10;
   1069   Overflow = init_Overflow;
   1070   Carry = init_Carry;
   1071   svar32_c = L_shr(svar32_a, svar16_b);
   1072   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1073 
   1074   svar32_a = 0xFFF;
   1075   svar16_b = -20;
   1076   Overflow = init_Overflow;
   1077   Carry = init_Carry;
   1078   svar32_c = L_shr(svar32_a, svar16_b);
   1079   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1080 
   1081   svar32_a = 0x12345678;
   1082   svar16_b = -10;
   1083   Overflow = init_Overflow;
   1084   Carry = init_Carry;
   1085   svar32_c = L_shr(svar32_a, svar16_b);
   1086   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1087 
   1088   svar32_a = 0x12345678;
   1089   svar16_b = -40;
   1090   Overflow = init_Overflow;
   1091   Carry = init_Carry;
   1092   svar32_c = L_shr(svar32_a, svar16_b);
   1093   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1094 
   1095   svar32_a = 1;
   1096   svar16_b = 1;
   1097   Overflow = init_Overflow;
   1098   Carry = init_Carry;
   1099   svar32_c = L_shr(svar32_a, svar16_b);
   1100   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1101 
   1102   svar32_a = 20;
   1103   svar16_b = 1;
   1104   Overflow = init_Overflow;
   1105   Carry = init_Carry;
   1106   svar32_c = L_shr(svar32_a, svar16_b);
   1107   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1108 
   1109   svar32_a = 0xFFF;
   1110   svar16_b = 10;
   1111   Overflow = init_Overflow;
   1112   Carry = init_Carry;
   1113   svar32_c = L_shr(svar32_a, svar16_b);
   1114   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1115 
   1116   svar32_a = 0xFFF;
   1117   svar16_b = 64;
   1118   Overflow = init_Overflow;
   1119   Carry = init_Carry;
   1120   svar32_c = L_shr(svar32_a, svar16_b);
   1121   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1122 
   1123   svar32_a = 0x12345678;
   1124   svar16_b = 10;
   1125   Overflow = init_Overflow;
   1126   Carry = init_Carry;
   1127   svar32_c = L_shr(svar32_a, svar16_b);
   1128   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1129 
   1130   svar32_a = 0x12345678;
   1131   svar16_b = 64;
   1132   Overflow = init_Overflow;
   1133   Carry = init_Carry;
   1134   svar32_c = L_shr(svar32_a, svar16_b);
   1135   fprintf(ref_file, "L_shr(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1136 
   1137 
   1138   /* shr_r */
   1139   /* int16_t shr_r(int16_t x, int16_t y) */
   1140   svar16_a = 1;
   1141   svar16_b = -1;
   1142   Overflow = init_Overflow;
   1143   Carry = init_Carry;
   1144   svar16_c = shr_r(svar16_a, svar16_b);
   1145   fprintf(ref_file, "shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1146 
   1147   svar16_a = 10;
   1148   svar16_b = -1;
   1149   Overflow = init_Overflow;
   1150   Carry = init_Carry;
   1151   svar16_c = shr_r(svar16_a, svar16_b);
   1152   fprintf(ref_file, "shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1153 
   1154   svar16_a = 0xFFF;
   1155   svar16_b = -10;
   1156   Overflow = init_Overflow;
   1157   Carry = init_Carry;
   1158   svar16_c = shr_r(svar16_a, svar16_b);
   1159   fprintf(ref_file, "shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1160 
   1161   svar16_a = 0xFFF;
   1162   svar16_b = -20;
   1163   Overflow = init_Overflow;
   1164   Carry = init_Carry;
   1165   svar16_c = shr_r(svar16_a, svar16_b);
   1166   fprintf(ref_file, "shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1167 
   1168   svar16_a = 1;
   1169   svar16_b = 1;
   1170   Overflow = init_Overflow;
   1171   Carry = init_Carry;
   1172   svar16_c = shr_r(svar16_a, svar16_b);
   1173   fprintf(ref_file, "shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1174 
   1175   svar16_a = 20;
   1176   svar16_b = 1;
   1177   Overflow = init_Overflow;
   1178   Carry = init_Carry;
   1179   svar16_c = shr_r(svar16_a, svar16_b);
   1180   fprintf(ref_file, "shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1181 
   1182   svar16_a = 0xFFF;
   1183   svar16_b = 10;
   1184   Overflow = init_Overflow;
   1185   Carry = init_Carry;
   1186   svar16_c = shr_r(svar16_a, svar16_b);
   1187   fprintf(ref_file, "shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1188 
   1189   svar16_a = 0xFFF;
   1190   svar16_b = 64;
   1191   Overflow = init_Overflow;
   1192   Carry = init_Carry;
   1193   svar16_c = shr_r(svar16_a, svar16_b);
   1194   fprintf(ref_file, "shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1195 
   1196 
   1197   /* mac_r */
   1198   /* int16_t mac_r(int32_t acc, int16_t x, int16_t y) */
   1199   svar16_a = 2;
   1200   svar16_b = 2;
   1201   svar32_a = 0x1234;
   1202   Overflow = init_Overflow;
   1203   Carry = init_Carry;
   1204   svar16_c = mac_r(svar32_a, svar16_a, svar16_b);
   1205   fprintf(ref_file, "mac_r(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1206 
   1207   svar16_a = -1;
   1208   svar16_b = -1;
   1209   Overflow = init_Overflow;
   1210   Carry = init_Carry;
   1211   svar16_c = mac_r(svar32_a, svar16_a, svar16_b);
   1212   fprintf(ref_file, "mac_r(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1213 
   1214   svar16_a = 0x8000;
   1215   svar16_b = 0x8000;
   1216   Overflow = init_Overflow;
   1217   Carry = init_Carry;
   1218   svar16_c = mac_r(svar32_a, svar16_a, svar16_b);
   1219   fprintf(ref_file, "mac_r(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1220 
   1221   svar16_a = 0x8000;
   1222   svar16_b = 0x8000;
   1223   Overflow = init_Overflow;
   1224   Carry = init_Carry;
   1225   svar32_a = -1;
   1226   svar16_c = mac_r(svar32_a, svar16_a, svar16_b);
   1227   fprintf(ref_file, "mac_r(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1228 
   1229   svar16_a = 0x244;
   1230   svar16_b = 0x522;
   1231   svar32_a = 0x123456;
   1232   Overflow = init_Overflow;
   1233   Carry = init_Carry;
   1234   svar16_c = mac_r(svar32_a, svar16_a, svar16_b);
   1235   fprintf(ref_file, "mac_r(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1236 
   1237 
   1238   /* msu_r */
   1239   /* int32_t msu_r(int32_t acc, int16_t x, int16_t y) */
   1240   svar16_a = 2;
   1241   svar16_b = 2;
   1242   svar32_a = 0x1234;
   1243   Overflow = init_Overflow;
   1244   Carry = init_Carry;
   1245   svar16_c = msu_r(svar32_a, svar16_a, svar16_b);
   1246   fprintf(ref_file, "msu_r(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1247 
   1248   svar16_a = -1;
   1249   svar16_b = -1;
   1250   Overflow = init_Overflow;
   1251   Carry = init_Carry;
   1252   svar16_c = msu_r(svar32_a, svar16_a, svar16_b);
   1253   fprintf(ref_file, "msu_r(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1254 
   1255   svar16_a = 0x8000;
   1256   svar16_b = 0x8000;
   1257   Overflow = init_Overflow;
   1258   Carry = init_Carry;
   1259   svar16_c = msu_r(svar32_a, svar16_a, svar16_b);
   1260   fprintf(ref_file, "msu_r(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1261 
   1262   svar16_a = 0x8000;
   1263   svar16_b = 0x8000;
   1264   svar32_a = 1;
   1265   Overflow = init_Overflow;
   1266   Carry = init_Carry;
   1267   svar16_c = msu_r(svar32_a, svar16_a, svar16_b);
   1268   fprintf(ref_file, "msu_r(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1269 
   1270   svar16_a = 0x321;
   1271   svar16_b = 0x243;
   1272   svar32_a = 0x123456;
   1273   Overflow = init_Overflow;
   1274   Carry = init_Carry;
   1275   svar16_c = msu_r(svar32_a, svar16_a, svar16_b);
   1276   fprintf(ref_file, "msu_r(%#x, %#x, %#x) = %#x overflow %d carry %d\n", svar32_a, svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1277 
   1278 
   1279   /* L_deposit_h */
   1280   /* int32_t L_deposit_h(int16_t x) */
   1281   svar16_b = 1;
   1282   Overflow = init_Overflow;
   1283   Carry = init_Carry;
   1284   svar32_a = L_deposit_h(svar16_b);
   1285   fprintf(ref_file, "L_deposit_h(%#x) = %#x overflow %d carry %d\n", svar16_b, svar32_a, Overflow, Carry);
   1286 
   1287   svar16_b = -1;
   1288   Overflow = init_Overflow;
   1289   Carry = init_Carry;
   1290   svar32_a = L_deposit_h(svar16_b);
   1291   fprintf(ref_file, "L_deposit_h(%#x) = %#x overflow %d carry %d\n", svar16_b, svar32_a, Overflow, Carry);
   1292 
   1293   svar16_b = -32768;
   1294   Overflow = init_Overflow;
   1295   Carry = init_Carry;
   1296   svar32_a = L_deposit_h(svar16_b);
   1297   fprintf(ref_file, "L_deposit_h(%#x) = %#x overflow %d carry %d\n", svar16_b, svar32_a, Overflow, Carry);
   1298 
   1299   svar16_b = 0x1234;
   1300   Overflow = init_Overflow;
   1301   Carry = init_Carry;
   1302   svar32_a = L_deposit_h(svar16_b);
   1303   fprintf(ref_file, "L_deposit_h(%#x) = %#x overflow %d carry %d\n", svar16_b, svar32_a, Overflow, Carry);
   1304 
   1305 
   1306   /* L_deposit_l */
   1307   /* int32_t L_deposit_l(int16_t x) */
   1308   svar16_b = 1;
   1309   Overflow = init_Overflow;
   1310   Carry = init_Carry;
   1311   svar32_a = L_deposit_l(svar16_b);
   1312   fprintf(ref_file, "L_deposit_l(%#x) = %#x overflow %d carry %d\n", svar16_b, svar32_a, Overflow, Carry);
   1313 
   1314   svar16_b = -1;
   1315   Overflow = init_Overflow;
   1316   Carry = init_Carry;
   1317   svar32_a = L_deposit_l(svar16_b);
   1318   fprintf(ref_file, "L_deposit_l(%#x) = %#x overflow %d carry %d\n", svar16_b, svar32_a, Overflow, Carry);
   1319 
   1320   svar16_b = -32768;
   1321   Overflow = init_Overflow;
   1322   Carry = init_Carry;
   1323   svar32_a = L_deposit_l(svar16_b);
   1324   fprintf(ref_file, "L_deposit_l(%#x) = %#x overflow %d carry %d\n", svar16_b, svar32_a, Overflow, Carry);
   1325 
   1326   svar16_b = 0x1234;
   1327   Overflow = init_Overflow;
   1328   Carry = init_Carry;
   1329   svar32_a = L_deposit_l(svar16_b);
   1330   fprintf(ref_file, "L_deposit_l(%#x) = %#x overflow %d carry %d\n", svar16_b, svar32_a, Overflow, Carry);
   1331 
   1332 
   1333   /* L_shr_r */
   1334   /* int32_t L_shr_r(int32_t x, int16_t y) */
   1335   svar32_a = 1;
   1336   svar16_b = -1;
   1337   Overflow = init_Overflow;
   1338   Carry = init_Carry;
   1339   svar32_c = L_shr_r(svar32_a, svar16_b);
   1340   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1341 
   1342   svar32_a = 10;
   1343   svar16_b = -1;
   1344   Overflow = init_Overflow;
   1345   Carry = init_Carry;
   1346   svar32_c = L_shr_r(svar32_a, svar16_b);
   1347   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1348 
   1349   svar32_a = 0xFFF;
   1350   svar16_b = -10;
   1351   Overflow = init_Overflow;
   1352   Carry = init_Carry;
   1353   svar32_c = L_shr_r(svar32_a, svar16_b);
   1354   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1355 
   1356   svar32_a = 0xFFF;
   1357   svar16_b = -20;
   1358   Overflow = init_Overflow;
   1359   Carry = init_Carry;
   1360   svar32_c = L_shr_r(svar32_a, svar16_b);
   1361   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1362 
   1363   svar32_a = 0x12345678;
   1364   svar16_b = -10;
   1365   Overflow = init_Overflow;
   1366   Carry = init_Carry;
   1367   svar32_c = L_shr_r(svar32_a, svar16_b);
   1368   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1369 
   1370   svar32_a = 0x12345678;
   1371   svar16_b = -40;
   1372   Overflow = init_Overflow;
   1373   Carry = init_Carry;
   1374   svar32_c = L_shr_r(svar32_a, svar16_b);
   1375   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1376 
   1377   svar32_a = 1;
   1378   svar16_b = 1;
   1379   Overflow = init_Overflow;
   1380   Carry = init_Carry;
   1381   svar32_c = L_shr_r(svar32_a, svar16_b);
   1382   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1383 
   1384   svar32_a = 20;
   1385   svar16_b = 1;
   1386   Overflow = init_Overflow;
   1387   Carry = init_Carry;
   1388   svar32_c = L_shr_r(svar32_a, svar16_b);
   1389   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1390 
   1391   svar32_a = 0xFFF;
   1392   svar16_b = 10;
   1393   Overflow = init_Overflow;
   1394   Carry = init_Carry;
   1395   svar32_c = L_shr_r(svar32_a, svar16_b);
   1396   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1397 
   1398   svar32_a = 0xFFF;
   1399   svar16_b = 64;
   1400   Overflow = init_Overflow;
   1401   Carry = init_Carry;
   1402   svar32_c = L_shr_r(svar32_a, svar16_b);
   1403   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1404 
   1405   svar32_a = 0x12345678;
   1406   svar16_b = 10;
   1407   Overflow = init_Overflow;
   1408   Carry = init_Carry;
   1409   svar32_c = L_shr_r(svar32_a, svar16_b);
   1410   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1411 
   1412   svar32_a = 0x12345678;
   1413   svar16_b = 64;
   1414   Overflow = init_Overflow;
   1415   Carry = init_Carry;
   1416   svar32_c = L_shr_r(svar32_a, svar16_b);
   1417   fprintf(ref_file, "L_shr_r(%#x, %d) = %#x overflow %d carry %d\n", svar32_a, svar16_b, svar32_c, Overflow, Carry);
   1418 
   1419 
   1420   /* L_abs */
   1421   /* int32_t L_abs(int32_t x) */
   1422   svar32_b = 1;
   1423   Overflow = init_Overflow;
   1424   Carry = init_Carry;
   1425   svar32_a = L_abs(svar32_b);
   1426   fprintf(ref_file, "L_abs(%#x) = %#x overflow %d carry %d\n", svar32_b, svar32_a, Overflow, Carry);
   1427 
   1428   svar32_b = -1;
   1429   Overflow = init_Overflow;
   1430   Carry = init_Carry;
   1431   svar32_a = L_abs(svar32_b);
   1432   fprintf(ref_file, "L_abs(%#x) = %#x overflow %d carry %d\n", svar32_b, svar32_a, Overflow, Carry);
   1433 
   1434   svar32_b = 0x80000000;
   1435   Overflow = init_Overflow;
   1436   Carry = init_Carry;
   1437   svar32_a = L_abs(svar32_b);
   1438   fprintf(ref_file, "L_abs(%#x) = %#x overflow %d carry %d\n", svar32_b, svar32_a, Overflow, Carry);
   1439 
   1440 
   1441   /* L_sat */
   1442   /* int32_t L_sat(int32_t x) */
   1443   svar32_b = 1;
   1444   Overflow = init_Overflow;
   1445   Carry = init_Carry;
   1446   svar32_a = L_sat(svar32_b);
   1447   fprintf(ref_file, "L_sat(%#x) = %#x overflow %d carry %d\n", svar32_b, svar32_a, Overflow, Carry);
   1448 
   1449   svar32_b = -1;
   1450   Overflow = init_Overflow;
   1451   Carry = init_Carry;
   1452   svar32_a = L_sat(svar32_b);
   1453   fprintf(ref_file, "L_sat(%#x) = %#x overflow %d carry %d\n", svar32_b, svar32_a, Overflow, Carry);
   1454 
   1455   svar32_b = -32768;
   1456   Overflow = init_Overflow;
   1457   Carry = init_Carry;
   1458   svar32_a = L_sat(svar32_b);
   1459   fprintf(ref_file, "L_sat(%#x) = %#x overflow %d carry %d\n", svar32_b, svar32_a, Overflow, Carry);
   1460 
   1461   svar32_b = 32768;
   1462   Overflow = init_Overflow;
   1463   Carry = init_Carry;
   1464   svar32_a = L_sat(svar32_b);
   1465   fprintf(ref_file, "L_sat(%#x) = %#x overflow %d carry %d\n", svar32_b, svar32_a, Overflow, Carry);
   1466 
   1467 
   1468   /* div_s */
   1469   /* int16_t div_s(int16_t x, int16_t y) */
   1470   svar16_a = 1;
   1471   svar16_b = 1;
   1472   Overflow = init_Overflow;
   1473   Carry = init_Carry;
   1474   svar16_c = div_s(svar16_a, svar16_b);
   1475   fprintf(ref_file, "div_s(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1476 
   1477   svar16_a = 10000;
   1478   svar16_b = 20000;
   1479   Overflow = init_Overflow;
   1480   Carry = init_Carry;
   1481   svar16_c = div_s(svar16_a, svar16_b);
   1482   fprintf(ref_file, "div_s(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1483 
   1484 
   1485   svar16_a = 10000;
   1486   svar16_b = 20000;
   1487   Overflow = init_Overflow;
   1488   Carry = init_Carry;
   1489   svar16_c = div_s(svar16_a, svar16_b);
   1490   fprintf(ref_file, "div_s(%#x, %#x) = %#x overflow %d carry %d\n", svar16_a, svar16_b, svar16_c, Overflow, Carry);
   1491 
   1492 }
   1493 
   1494 void exec_dspfns(void)
   1495 {
   1496   Overflow = 0;
   1497 
   1498   exec_dspfns1(0, 0);
   1499   exec_dspfns1(0, 1);
   1500   exec_dspfns1(1, 0);
   1501   exec_dspfns1(1, 1);
   1502 }
   1503