Rafael Espindola | 0ec89f9 | 2010-12-30 22:59:32 +0000 | [diff] [blame^] | 1 | // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s |
| 2 | |
| 3 | unsigned long long foo(unsigned long long addr, unsigned long long a0, |
| 4 | unsigned long long a1, unsigned long long a2, |
| 5 | unsigned long long a3, unsigned long long a4, |
| 6 | unsigned long long a5) { |
| 7 | register unsigned long long result asm("rax"); |
| 8 | register unsigned long long b0 asm("rdi"); |
| 9 | register unsigned long long b1 asm("rsi"); |
| 10 | register unsigned long long b2 asm("rdx"); |
| 11 | register unsigned long long b3 asm("rcx"); |
| 12 | register unsigned long long b4 asm("r8"); |
| 13 | register unsigned long long b5 asm("r9"); |
| 14 | |
| 15 | b0 = a0; |
| 16 | b1 = a1; |
| 17 | b2 = a2; |
| 18 | b3 = a3; |
| 19 | b4 = a4; |
| 20 | b5 = a5; |
| 21 | |
| 22 | asm("call *%1" : "=r" (result) |
| 23 | : "r"(addr), "r" (b0), "r" (b1), "r" (b2), "r" (b3), "r" (b4), "r" (b5)); |
| 24 | return result; |
| 25 | } |
| 26 | |
| 27 | // CHECK: call i64 asm "call *$1", "={rax},r,{rdi},{rsi},{rdx},{rcx},{r8},{r9},~{dirflag},~{fpsr},~{flags}" |