X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Ftest%2Fasm_test.c;h=5d2df8cb826c7c82bde6c34a6dd9e0db3366196a;hb=1df915e2c8671f7a8c057109cdfdc6a5fbabb897;hp=27aff797a97621fb868884a957bc5d7d12b98865;hpb=774486f37ed015066db8a5a12492d924b25bfc1d;p=libfirm diff --git a/ir/be/test/asm_test.c b/ir/be/test/asm_test.c index 27aff797a..5d2df8cb8 100644 --- a/ir/be/test/asm_test.c +++ b/ir/be/test/asm_test.c @@ -1,5 +1,6 @@ #include +#ifdef __i386__ static inline unsigned char inb(const unsigned short port) { unsigned char val; @@ -27,17 +28,70 @@ static inline int mov(int val) { int res; - __asm__ ("movl %0, %1" : "=r"(res) : "ri" (val)); + __asm__ ("movl %1, %0" : "=r"(res) : "ri" (val)); return res; } +static inline unsigned short swap16(unsigned short x) +{ + __asm__("xchgb %b0, %h0 /* in: %1 out: %0 */" : "=q" (x) : "0" (x)); + return x; +} -int main() +static inline unsigned int swap32(unsigned int x) +{ + __asm__("bswap %0 /* %1 */" : "=r" (x) : "0" (x)); + return x; +} + +#if 1 +typedef struct kernel_fd_set { + int bla; + int blup; +} kernel_fd_set; +#else +typedef int kernel_fd_set; +#endif + +void fs_set(int fd, kernel_fd_set* set) { + __asm__("btsl %1,%0" : "=m" (*(set+2)) : "r" (fd)); +} + +void fd_isset(int fd, kernel_fd_set *set) { + unsigned char result; + + __asm__ __volatile__("btl %1,%2\n" + "\tsetb %0" + : "=q" (result) + : "r" (fd), "m" (*set)); + return result; +} + +int justcompile(void) { - //sincostest(0.5); outb(123, 42); outb(12345, 42); + return inb(20) + inb(5); +} + +int main() +{ + //sincostest(0.5); + /*outb(123, 42); + outb(12345, 42);*/ + + printf("Swap16: %d Swap32: %d\n", swap16(12), swap32(123551235)); - return mov(0) + inb(12345) + inb(123); + return mov(0) /*+ inb(12345) + inb(123)*/; } + +#else + +int main() +{ + printf("Warning: asmtest only work on x86\n"); + return 0; +} + +#endif