Home | History | Annotate | Download | only in mips64
      1 #include <stdio.h>
      2 #include "const.h"
      3 
      4 const float reg_val_f[] = {
      5    -347856.475, 356047.56,   -1.0,       23.04,
      6    1752,        0.0024575,   0.00000001, -248562.76,
      7    1384.6,      -7.2945676,  1000000000, -5786.47,
      8    -347856.475, 356047.56,   -1.0,       23.04,
      9    0,           456.2489562, 3,          -1,
     10    -45786.476,  456.2489562, 34.00046,   45786.476,
     11    0,           456.2489562, 3,          -1,
     12    1384.6,      -7.2945676,  1000000000, -5786.47,
     13    1752,        0.0024575,   0.00000001, -248562.76,
     14    -45786.476,  456.2489562, 34.00046,   45786.476,
     15    1752065,     107,         -45667.24,  -7.2945676,
     16    -347856.475, 356047.56,   -1.0,       23.04,
     17    -347856.475, 356047.56,   -1.0,       23.04,
     18    1752,        0.0024575,   0.00000001, -248562.76,
     19    1384.6,      -7.2945676,  1000000000, -5786.47,
     20    -347856.475, 356047.56,   -1.0,       23.04,
     21    0,           456.2489562, 3,          -1,
     22    -45786.476,  456.2489562, 34.00046,   45786.476,
     23    0,           456.2489562, 3,          -1,
     24    1384.6,      -7.2945676,  1000000000, -5786.47,
     25    1752,        0.0024575,   0.00000001, -248562.76,
     26    -45786.476,  456.2489562, 34.00046,   45786.476,
     27    1752065,     107,         -45667.24,  -7.2945676,
     28    -347856.475, 356047.56,   -1.0,       23.04
     29 };
     30 
     31 const float fs1_f[] = {
     32    0,           456.2489562, 3,          -1,
     33    1384.6,      -7.2945676,  1000000000, -5786.47,
     34    1752,        0.0024575,   0.00000001, -248562.76,
     35    -45786.476,  456.2489562, 34.00046,   45786.476,
     36    1752065,     107,         -45667.24,  -7.2945676,
     37    -347856.475, 356047.56,   -1.0,       23.04
     38 };
     39 
     40 const double fs2_f[] = {
     41    0,           456.2489562, 3,           -1,
     42    -7.2945676,  1384.6,      1000000000,  -5786.47,
     43    1752,        0.0024575,   -248562.76,  0.00000001,
     44    -45786.476,  45786.476,   456.2489562, 34.00046,
     45    1752065,     107,         -45667.24,   -7.2945676,
     46    -347856.475, 23.04        -1.0,        356047.56
     47 };
     48 
     49 #define TEST1(mem)                                           \
     50 {                                                            \
     51    unsigned long long out;                                   \
     52    __asm__ __volatile__(                                     \
     53       ".set  noreorder"  "\n\t"                              \
     54       ".set  nomacro"    "\n\t"                              \
     55       "move  $t0, %1"    "\n\t"                              \
     56       "mtc1  $t0, $f0"   "\n\t"                              \
     57       "mov.s $f1, $f0"   "\n\t"                              \
     58       "mfc1  $t1, $f1"   "\n\t"                              \
     59       "move  %0,  $t1"   "\n\t"                              \
     60       ".set  reorder"    "\n\t"                              \
     61       ".set  macro"      "\n\t"                              \
     62       : "=r" (out)                                           \
     63       : "r" (mem)                                            \
     64       : "t0", "t1", "$f0", "$f1"                             \
     65    );                                                        \
     66    printf("mtc1, mov.s, mfc1 :: mem: 0x%llx out: 0x%llx\n",  \
     67           (long long)mem, out);                              \
     68 }
     69 
     70 #define TEST2(mem)                                             \
     71 {                                                              \
     72    unsigned long long out;                                     \
     73    __asm__ __volatile__(                                       \
     74       ".set  noreorder"  "\n\t"                                \
     75       ".set  nomacro"    "\n\t"                                \
     76       "move  $t0, %1"    "\n\t"                                \
     77       "dmtc1 $t0, $f2"   "\n\t"                                \
     78       "mov.d $f0, $f2"   "\n\t"                                \
     79       "dmfc1 $t1, $f0"   "\n\t"                                \
     80       "move  %0,  $t1"   "\n\t"                                \
     81       ".set  reorder"  "\n\t"                                  \
     82       ".set  macro"    "\n\t"                                  \
     83       : "=r" (out)                                             \
     84       : "r" (mem)                                              \
     85       : "t0", "t1", "$f0", "$f2"                               \
     86    );                                                          \
     87    printf("dmtc1, mov.d, dmfc1 :: mem: 0x%llx out: 0x%llx\n",  \
     88           (long long)mem, out);                                \
     89 }
     90 
     91 /* movX.s fd, fs */
     92 #define TEST3(instruction, FD, FS, cc, offset)    \
     93 {                                                 \
     94    unsigned int out;                              \
     95    __asm__ __volatile__(                          \
     96       "li     $t0,    1"               "\n\t"     \
     97       "move   $t1,    %1"              "\n\t"     \
     98       "mtc1   $t0,    $f0"             "\n\t"     \
     99       "mtc1   $t1,    $f2"             "\n\t"     \
    100       "dmtc1  $zero,  $"#FD            "\n\t"     \
    101       "dmtc1  $zero,  $"#FS            "\n\t"     \
    102       "c.eq.s $f0,    $f2"             "\n\t"     \
    103       "move   $t0,    %2"              "\n\t"     \
    104       "lwc1   $"#FS", "#offset"($t0)"  "\n\t"     \
    105       instruction                      "\n\t"     \
    106       "mfc1   %0,     $"#FD            "\n\t"     \
    107       : "=r" (out)                                \
    108       : "r" (cc), "r" (reg_val_f)                 \
    109       : "t0", "t1", "$"#FD, "$"#FS, "$f0", "$f2"  \
    110    );                                             \
    111    printf("%s :: out: 0x%x, cc: %d\n",            \
    112           instruction, out, cc);                  \
    113 }
    114 
    115 /* movX.d fd, fs */
    116 #define TEST3d(instruction, FD, FS, cc, offset)   \
    117 {                                                 \
    118    unsigned long long out;                        \
    119    __asm__ __volatile__(                          \
    120       "li     $t0,    1"               "\n\t"     \
    121       "move   $t1,    %1"              "\n\t"     \
    122       "mtc1   $t0,    $f0"             "\n\t"     \
    123       "mtc1   $t1,    $f2"             "\n\t"     \
    124       "dmtc1  $zero,  $"#FD            "\n\t"     \
    125       "c.eq.s $f0,    $f2"             "\n\t"     \
    126       "move   $t0,    %2"              "\n\t"     \
    127       "ldc1   $"#FS", "#offset"($t0)"  "\n\t"     \
    128       instruction                      "\n\t"     \
    129       "dmfc1  %0,     $"#FD            "\n\t"     \
    130       : "=r" (out)                                \
    131       : "r" (cc), "r" (reg_val_f)                 \
    132       : "t0", "t1", "$"#FD, "$"#FS, "$f0", "$f2"  \
    133    );                                             \
    134    printf("%s :: out: 0x%llx, cc: %d\n",          \
    135           instruction, out, cc);                  \
    136 }
    137 
    138 /* movX.s fd, fs, rt */
    139 #define TEST4(instruction, offset, RTval, FD, FS, RT)  \
    140 {                                                      \
    141    unsigned int out;                                   \
    142    __asm__ __volatile__(                               \
    143       "move  $"#RT", %2"              "\n\t"           \
    144       "dmtc1 $zero,  $"#FD            "\n\t"           \
    145       "dmtc1 $zero,  $"#FS            "\n\t"           \
    146       "move  $t0,    %1"              "\n\t"           \
    147       "lwc1  $"#FS", "#offset"($t0)"  "\n\t"           \
    148       instruction                     "\n\t"           \
    149       "mfc1 %0,     $"#FD"\n\t"                        \
    150       : "=r" (out)                                     \
    151       : "r" (reg_val_f), "r" (RTval)                   \
    152       : "t0", #RT, "$"#FD, "$"#FS                      \
    153    );                                                  \
    154    printf("%s :: out: 0x%x\n", instruction, out);      \
    155 }
    156 
    157 /* movX.d fd, fs, rt */
    158 #define TEST4d(instruction, offset, RTval, FD, FS, RT)  \
    159 {                                                       \
    160    unsigned long long out;                              \
    161    __asm__ __volatile__(                                \
    162       "move  $"#RT", %2"              "\n\t"            \
    163       "dmtc1 $zero,  $"#FD            "\n\t"            \
    164       "dmtc1 $zero,  $"#FS            "\n\t"            \
    165       "move  $t0,    %1"              "\n\t"            \
    166       "ldc1  $"#FS", "#offset"($t0)"  "\n\t"            \
    167       instruction                     "\n\t"            \
    168       "dmfc1 %0,     $"#FD            "\n\t"            \
    169       : "=r" (out)                                      \
    170       : "r" (reg_val_f), "r" (RTval)                    \
    171       : #RT, "t0", "$"#FD, "$"#FS                       \
    172    );                                                   \
    173    printf("%s :: out: 0x%llx\n", instruction, out);     \
    174 }
    175 
    176 /* movf, movt */
    177 #define TEST5(instruction, RDval, RSval, RD, RS)                  \
    178 {                                                                 \
    179    unsigned long out;                                             \
    180    __asm__ __volatile__(                                          \
    181       "c.eq.s      %3,     %4"             "\n\t"                 \
    182       "move        $"#RD", %1"             "\n\t"                 \
    183       "move        $"#RS", %2"             "\n\t"                 \
    184       instruction" $"#RD", $"#RS", $fcc0"  "\n\t"                 \
    185       "move        %0,     $"#RD           "\n\t"                 \
    186       : "=r" (out)                                                \
    187       : "r" (RDval), "r" (RSval), "f" (fs1_f[i]), "f" (fs2_f[i])  \
    188       : #RD, #RS                                                  \
    189    );                                                             \
    190    printf("%s ::  RDval: 0x%x, RSval: 0x%x, out: 0x%lx\n",        \
    191           instruction, RDval, RSval, out);                        \
    192 }
    193 
    194 int main()
    195 {
    196    int i;
    197    init_reg_val2();
    198 
    199    for (i = 0; i < N; i++) {
    200       TEST1(reg_val1[i]);
    201       TEST2(reg_val1[i]);
    202       TEST1(reg_val2[i]);
    203       TEST2(reg_val2[i]);
    204    }
    205 
    206    printf("--- MOVF.S ---\n");
    207    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 1, 0);
    208    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 1, 8);
    209    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 1, 16);
    210    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 1, 24);
    211    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 1, 32)
    212    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 1, 40)
    213    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 1, 48)
    214    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 1, 56)
    215    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 0, 0);
    216    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 0, 8);
    217    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 0, 16);
    218    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 0, 24);
    219    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 0, 32);
    220    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 0, 40);
    221    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 0, 48);
    222    TEST3("movf.s  $f4, $f6, $fcc0", f4, f6, 0, 56);
    223 
    224    printf("--- MOVF.D ---\n");
    225    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 1, 0);
    226    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 1, 8);
    227    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 1, 16);
    228    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 1, 24);
    229    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 1, 32);
    230    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 1, 40)
    231    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 1, 48)
    232    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 1, 56)
    233    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 0, 0);
    234    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 0, 8);
    235    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 0, 16);
    236    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 0, 24);
    237    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 0, 32);
    238    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 0, 40);
    239    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 0, 48);
    240    TEST3d("movf.d  $f4, $f6, $fcc0", f4, f6, 0, 56);
    241 
    242    printf("--- MOVN.S ---\n");
    243    TEST4("movn.s  $f0, $f2, $11", 0,  0,          f0, f2, 11);
    244    TEST4("movn.s  $f0, $f2, $11", 0,  1,          f0, f2, 11);
    245    TEST4("movn.s  $f0, $f2, $11", 8,  0xffff,     f0, f2, 11);
    246    TEST4("movn.s  $f0, $f2, $11", 16, -1,         f0, f2, 11);
    247    TEST4("movn.s  $f0, $f2, $11", 16, 5,          f0, f2, 11);
    248    TEST4("movn.s  $f0, $f2, $11", 24, 0,          f0, f2, 11);
    249    TEST4("movn.s  $f0, $f2, $11", 24, 0,          f0, f2, 11);
    250    TEST4("movn.s  $f0, $f2, $11", 32, 5,          f0, f2, 11);
    251    TEST4("movn.s  $f0, $f2, $11", 32, 125487,     f0, f2, 11);
    252    TEST4("movn.s  $f0, $f2, $11", 40, 68,         f0, f2, 11);
    253    TEST4("movn.s  $f0, $f2, $11", 40, -122544,    f0, f2, 11);
    254    TEST4("movn.s  $f0, $f2, $11", 48, 0,          f0, f2, 11);
    255    TEST4("movn.s  $f0, $f2, $11", 48, 0,          f0, f2, 11);
    256    TEST4("movn.s  $f0, $f2, $11", 56, 0xffffffff, f0, f2, 11);
    257    TEST4("movn.s  $f0, $f2, $11", 56, 0x80000000, f0, f2, 11);
    258    TEST4("movn.s  $f0, $f2, $11", 64, 0x7fffffff, f0, f2, 11);
    259 
    260    printf("--- MOVN.D ---\n");
    261    TEST4d("movn.d $f0, $f2, $11", 0,  0,          f0, f2, 11);
    262    TEST4d("movn.d $f0, $f2, $11", 0,  1,          f0, f2, 11);
    263    TEST4d("movn.d $f0, $f2, $11", 8,  0xffff,     f0, f2, 11);
    264    TEST4d("movn.d $f0, $f2, $11", 8,  -1,         f0, f2, 11);
    265    TEST4d("movn.d $f0, $f2, $11", 16, 5,          f0, f2, 11);
    266    TEST4d("movn.d $f0, $f2, $11", 24, 0,          f0, f2, 11);
    267    TEST4d("movn.d $f0, $f2, $11", 24, 0,          f0, f2, 11);
    268    TEST4d("movn.d $f0, $f2, $11", 32, 5,          f0, f2, 11);
    269    TEST4d("movn.d $f0, $f2, $11", 32, 125487,     f0, f2, 11);
    270    TEST4d("movn.d $f0, $f2, $11", 40, 68,         f0, f2, 11);
    271    TEST4d("movn.d $f0, $f2, $11", 40, -122544,    f0, f2, 11);
    272    TEST4d("movn.d $f0, $f2, $11", 48, 0,          f0, f2, 11);
    273    TEST4d("movn.d $f0, $f2, $11", 48, 0,          f0, f2, 11);
    274    TEST4d("movn.d $f0, $f2, $11", 56, 0xffffffff, f0, f2, 11);
    275    TEST4d("movn.d $f0, $f2, $11", 56, 0x80000000, f0, f2, 11);
    276    TEST4d("movn.d $f0, $f2, $11", 64, 0x7fffffff, f0, f2, 11);
    277 
    278    printf("--- MOVT.S ---\n");
    279    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 1, 0);
    280    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 1, 0);
    281    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 1, 8);
    282    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 1, 16);
    283    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 1, 24);
    284    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 1, 32);
    285    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 1, 40)
    286    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 1, 48)
    287    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 1, 56)
    288    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 0, 0);
    289    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 0, 8);
    290    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 0, 16);
    291    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 0, 24);
    292    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 0, 32);
    293    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 0, 40);
    294    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 0, 48);
    295    TEST3("movt.s  $f4, $f6, $fcc0", f4, f6, 0, 56);
    296 
    297    printf("--- MOVT.D ---\n");
    298    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 1, 0);
    299    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 1, 0);
    300    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 1, 8);
    301    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 1, 16);
    302    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 1, 24);
    303    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 1, 32);
    304    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 1, 40)
    305    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 1, 48)
    306    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 1, 56)
    307    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 0, 0);
    308    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 0, 8);
    309    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 0, 16);
    310    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 0, 24);
    311    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 0, 32);
    312    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 0, 40);
    313    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 0, 48);
    314    TEST3d("movt.d  $f4, $f6, $fcc0", f4, f6, 0, 56);
    315 
    316    printf("--- MOVZ.S ---\n");
    317    TEST4("movz.s $f0, $f2, $11", 0,  0,          f0, f2, 11);
    318    TEST4("movz.s $f0, $f2, $11", 8,  1,          f0, f2, 11);
    319    TEST4("movz.s $f0, $f2, $11", 8,  0xffff,     f0, f2, 11);
    320    TEST4("movz.s $f0, $f2, $11", 16, -1,         f0, f2, 11);
    321    TEST4("movz.s $f0, $f2, $11", 16, 5,          f0, f2, 11);
    322    TEST4("movz.s $f0, $f2, $11", 24, 0,          f0, f2, 11);
    323    TEST4("movz.s $f0, $f2, $11", 24, 0,          f0, f2, 11);
    324    TEST4("movz.s $f0, $f2, $11", 32, 5,          f0, f2, 11);
    325    TEST4("movz.s $f0, $f2, $11", 32, 125487,     f0, f2, 11);
    326    TEST4("movz.s $f0, $f2, $11", 40, 68,         f0, f2, 11);
    327    TEST4("movz.s $f0, $f2, $11", 40, -122544,    f0, f2, 11);
    328    TEST4("movz.s $f0, $f2, $11", 48, 0,          f0, f2, 11);
    329    TEST4("movz.s $f0, $f2, $11", 48, 0,          f0, f2, 11);
    330    TEST4("movz.s $f0, $f2, $11", 56, 0xffffffff, f0, f2, 11);
    331    TEST4("movz.s $f0, $f2, $11", 56, 0x80000000, f0, f2, 11);
    332    TEST4("movz.s $f0, $f2, $11", 64, 0x7fffffff, f0, f2, 11);
    333 
    334    printf("--- MOVZ.D ---\n");
    335    TEST4d("movz.d $f0, $f2, $11", 0,  0,          f0, f2, 11);
    336    TEST4d("movz.d $f0, $f2, $11", 0,  1,          f0, f2, 11);
    337    TEST4d("movz.d $f0, $f2, $11", 8,  0xffff,     f0, f2, 11);
    338    TEST4d("movz.d $f0, $f2, $11", 16, -1,         f0, f2, 11);
    339    TEST4d("movz.d $f0, $f2, $11", 16, 5,          f0, f2, 11);
    340    TEST4d("movz.d $f0, $f2, $11", 24, 0,          f0, f2, 11);
    341    TEST4d("movz.d $f0, $f2, $11", 24, 0,          f0, f2, 11);
    342    TEST4d("movz.d $f0, $f2, $11", 32, 5,          f0, f2, 11);
    343    TEST4d("movz.d $f0, $f2, $11", 32, 125487,     f0, f2, 11);
    344    TEST4d("movz.d $f0, $f2, $11", 40, 68,         f0, f2, 11);
    345    TEST4d("movz.d $f0, $f2, $11", 40, -122544,    f0, f2, 11);
    346    TEST4d("movz.d $f0, $f2, $11", 48, 0,          f0, f2, 11);
    347    TEST4d("movz.d $f0, $f2, $11", 48, 0,          f0, f2, 11);
    348    TEST4d("movz.d $f0, $f2, $11", 56, 0xffffffff, f0, f2, 11);
    349    TEST4d("movz.d $f0, $f2, $11", 56, 0x80000000, f0, f2, 11);
    350    TEST4d("movz.d $f0, $f2, $11", 64, 0x7fffffff, f0, f2, 11);
    351 
    352    printf("--- MOVF --- if FPConditionalCode(cc) == 0 then "
    353           "out = RSval else out = RDval\n");
    354    for (i = 0; i < 24; i++) {
    355       TEST5("movf", 0xaaaaaaaa, 0x80000000, t0, t1);
    356       TEST5("movf", 0xccccffff, 0xffffffff, t1, t2);
    357       TEST5("movf", 0xffffaaaa, 0xaaaaffff, t3, t1);
    358       TEST5("movf", 0x0,        0xffffffff, t3, t0);
    359    }
    360 
    361    printf("--- MOVT --- if FPConditionalCode(cc) == 1 then "
    362           "out = RSval else out = RDval\n");
    363    for (i = 0; i < 24; i++) {
    364       TEST5("movt", 0x0,        0xffffffff, t0, t1);
    365       TEST5("movt", 0x11111111, 0xeeeeffff, t1, t2);
    366       TEST5("movt", 0x5555ffff, 0xffffffff, t3, t1);
    367       TEST5("movt", 0xeeeeeeee, 0xffffeeee, t3, t0);
    368    }
    369 
    370    return 0;
    371 }
    372