From: Dan Gohman Date: Mon, 23 Mar 2009 04:28:24 +0000 (+0000) Subject: Add comments explaining why there's only one register for X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=82f84159e0ec945657054ddcf465aca3253339ab;p=oota-llvm.git Add comments explaining why there's only one register for i8 return values. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67502 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86CallingConv.td b/lib/Target/X86/X86CallingConv.td index d2fc86398e4..370bae7a50c 100644 --- a/lib/Target/X86/X86CallingConv.td +++ b/lib/Target/X86/X86CallingConv.td @@ -22,7 +22,12 @@ class CCIfSubtarget // Return-value conventions common to all X86 CC's. def RetCC_X86Common : CallingConv<[ - // Scalar values are returned in AX first, then DX. + // Scalar values are returned in AX first, then DX, except for i8 where + // the convention is to return values in AL and AH. However, using AL and + // is AH problematic -- a return of {i16,i8} would end up using AX and AH, + // and one value would clobber the other. C front-ends are currently expected + // to pack two i8 values into an i16 in the rare situations where this + // is necessary. CCIfType<[i8] , CCAssignToReg<[AL]>>, CCIfType<[i16], CCAssignToReg<[AX, DX]>>, CCIfType<[i32], CCAssignToReg<[EAX, EDX]>>,