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]>>,