qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

test-i386-fisttp.c (3076B)


      1 /* Test fisttpl and fisttpll instructions.  */
      2 
      3 #include <stdint.h>
      4 #include <stdio.h>
      5 #include <string.h>
      6 
      7 union u {
      8     struct { uint64_t sig; uint16_t sign_exp; } s;
      9     long double ld;
     10 };
     11 
     12 volatile union u ld_invalid_1 = { .s = { 1, 1234 } };
     13 
     14 int main(void)
     15 {
     16     int ret = 0;
     17     int32_t res_32;
     18     int64_t res_64;
     19     __asm__ volatile ("fisttpl %0" : "=m" (res_32) : "t" (0x1p100L) : "st");
     20     if (res_32 != INT32_MIN) {
     21         printf("FAIL: fisttpl 0x1p100\n");
     22         ret = 1;
     23     }
     24     __asm__ volatile ("fisttpl %0" : "=m" (res_32) : "t" (-0x1p100L) : "st");
     25     if (res_32 != INT32_MIN) {
     26         printf("FAIL: fisttpl -0x1p100\n");
     27         ret = 1;
     28     }
     29     __asm__ volatile ("fisttpl %0" : "=m" (res_32) : "t" (__builtin_infl()) :
     30                       "st");
     31     if (res_32 != INT32_MIN) {
     32         printf("FAIL: fisttpl inf\n");
     33         ret = 1;
     34     }
     35     __asm__ volatile ("fisttpl %0" : "=m" (res_32) : "t" (-__builtin_infl()) :
     36                       "st");
     37     if (res_32 != INT32_MIN) {
     38         printf("FAIL: fisttpl -inf\n");
     39         ret = 1;
     40     }
     41     __asm__ volatile ("fisttpl %0" : "=m" (res_32) : "t" (__builtin_nanl("")) :
     42                       "st");
     43     if (res_32 != INT32_MIN) {
     44         printf("FAIL: fisttpl nan\n");
     45         ret = 1;
     46     }
     47     __asm__ volatile ("fisttpl %0" : "=m" (res_32) :
     48                       "t" (-__builtin_nanl("")) : "st");
     49     if (res_32 != INT32_MIN) {
     50         printf("FAIL: fisttpl -nan\n");
     51         ret = 1;
     52     }
     53     __asm__ volatile ("fisttpl %0" : "=m" (res_32) : "t" (ld_invalid_1.ld) :
     54                       "st");
     55     if (res_32 != INT32_MIN) {
     56         printf("FAIL: fisttpl invalid\n");
     57         ret = 1;
     58     }
     59     __asm__ volatile ("fisttpll %0" : "=m" (res_64) : "t" (0x1p100L) : "st");
     60     if (res_64 != INT64_MIN) {
     61         printf("FAIL: fisttpll 0x1p100\n");
     62         ret = 1;
     63     }
     64     __asm__ volatile ("fisttpll %0" : "=m" (res_64) : "t" (-0x1p100L) : "st");
     65     if (res_64 != INT64_MIN) {
     66         printf("FAIL: fisttpll -0x1p100\n");
     67         ret = 1;
     68     }
     69     __asm__ volatile ("fisttpll %0" : "=m" (res_64) : "t" (__builtin_infl()) :
     70                       "st");
     71     if (res_64 != INT64_MIN) {
     72         printf("FAIL: fisttpll inf\n");
     73         ret = 1;
     74     }
     75     __asm__ volatile ("fisttpll %0" : "=m" (res_64) : "t" (-__builtin_infl()) :
     76                       "st");
     77     if (res_64 != INT64_MIN) {
     78         printf("FAIL: fisttpll -inf\n");
     79         ret = 1;
     80     }
     81     __asm__ volatile ("fisttpll %0" : "=m" (res_64) :
     82                       "t" (__builtin_nanl("")) : "st");
     83     if (res_64 != INT64_MIN) {
     84         printf("FAIL: fisttpll nan\n");
     85         ret = 1;
     86     }
     87     __asm__ volatile ("fisttpll %0" : "=m" (res_64) :
     88                       "t" (-__builtin_nanl("")) : "st");
     89     if (res_64 != INT64_MIN) {
     90         printf("FAIL: fisttpll -nan\n");
     91         ret = 1;
     92     }
     93     __asm__ volatile ("fisttpll %0" : "=m" (res_64) : "t" (ld_invalid_1.ld) :
     94                       "st");
     95     if (res_64 != INT64_MIN) {
     96         printf("FAIL: fisttpll invalid\n");
     97         ret = 1;
     98     }
     99     return ret;
    100 }