Add comments explaining why there's only one register for
authorDan Gohman <gohman@apple.com>
Mon, 23 Mar 2009 04:28:24 +0000 (04:28 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 23 Mar 2009 04:28:24 +0000 (04:28 +0000)
i8 return values.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67502 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86CallingConv.td

index d2fc86398e4335c99723bf18dda8fcd7eb31cb73..370bae7a50cf02a7bfac1348e8daea72448b82c5 100644 (file)
@@ -22,7 +22,12 @@ class CCIfSubtarget<string F, CCAction A>
 
 // 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]>>,