[LLVMdev] Is addrspacecast implemented on Windows?
Kai Nacke
kai.nacke at redstar.de
Mon Jan 27 12:04:09 PST 2014
Hi all!
On x86_64, segment prefix fs: is in address space 257 and gs: in address
space 256. (BTW: are there constants for these magic values?) How can I
use this in IR? I want to express this assembler code in IR:
mov RAX, 8;
mov RAX, GS:[RAX];
ret;
I tried the following:
define i64 @getStackBottom(i64 %addr) {
entry:
%ptr = inttoptr i64 %addr to i64*
%fs_ptr = addrspacecast i64* %ptr to i64 addrspace(256)*
%bottom = load i64 addrspace(256)* %fs_ptr, align 1
ret i64 %bottom
}
but this results in
LLVM ERROR: Cannot select: 0xcc6c60: i64 = addrspacecast 0xcc6b60[0 ->
256] [ORD=3] [ID=6]
0xcc6b60: i64,ch = CopyFromReg 0xc95e38, 0xcc6a60 [ORD=1] [ID=5]
0xcc6a60: i64 = Register %vreg0 [ID=1]
In function: getStackBottom
Stack dump:
0. Program arguments: llc thr_ll.ll
1. Running pass 'Function Pass Manager' on module 'thr_ll.ll'.
2. Running pass 'X86 DAG->DAG Instruction Selection' on function
'@getStackBottom'
Do I miss something here? Or is this simply not yet implemented?
Regards,
Kai
More information about the llvm-dev
mailing list