xref: /qemu/tests/tcg/i386/test-i386-fbstp.c (revision 18c53e1e73197a24f9f4b66b1276eb9868db5bf0)
1*18c53e1eSJoseph Myers /* Test fbstp instruction.  */
2*18c53e1eSJoseph Myers 
3*18c53e1eSJoseph Myers #include <stdio.h>
4*18c53e1eSJoseph Myers #include <string.h>
5*18c53e1eSJoseph Myers 
6*18c53e1eSJoseph Myers int main(void)
7*18c53e1eSJoseph Myers {
8*18c53e1eSJoseph Myers     int ret = 0;
9*18c53e1eSJoseph Myers     unsigned char out[10];
10*18c53e1eSJoseph Myers     memset(out, 0xfe, sizeof out);
11*18c53e1eSJoseph Myers     __asm__ volatile ("fbstp %0" : "=m" (out) : "t" (-0.0L) : "st");
12*18c53e1eSJoseph Myers     out[9] &= 0x80;
13*18c53e1eSJoseph Myers     if (memcmp(out, "\0\0\0\0\0\0\0\0\0\x80", sizeof out) != 0) {
14*18c53e1eSJoseph Myers         printf("FAIL: fbstp -0\n");
15*18c53e1eSJoseph Myers         ret = 1;
16*18c53e1eSJoseph Myers     }
17*18c53e1eSJoseph Myers     memset(out, 0x12, sizeof out);
18*18c53e1eSJoseph Myers     __asm__ volatile ("fbstp %0" : "=m" (out) : "t" (-0.1L) : "st");
19*18c53e1eSJoseph Myers     out[9] &= 0x80;
20*18c53e1eSJoseph Myers     if (memcmp(out, "\0\0\0\0\0\0\0\0\0\x80", sizeof out) != 0) {
21*18c53e1eSJoseph Myers         printf("FAIL: fbstp -0.1\n");
22*18c53e1eSJoseph Myers         ret = 1;
23*18c53e1eSJoseph Myers     }
24*18c53e1eSJoseph Myers     return ret;
25*18c53e1eSJoseph Myers }
26