Index: src/BasicTypes-gen.cpp
===================================================================
--- src/BasicTypes-gen.cpp	(revision 32a119e9b8a3d5aafe2b32557df41f24f81a9f60)
+++ src/BasicTypes-gen.cpp	(revision 44acc7230995f5609bc1cac28ef52b28ba5617ec)
@@ -45,9 +45,9 @@
 	Float64xComplex,
 	Float80,
+	LongDouble,
+	LongDoubleComplex,
+	uuFloat128,
 	Float128,
 	Float128Complex,
-	uuFloat128,
-	LongDouble,
-	LongDoubleComplex,
 	Float128x,
 	Float128xComplex,
@@ -113,15 +113,16 @@
 	{ DoubleComplex, "DoubleComplex", "DC", "double _Complex", "Cd", Floating, Float64xComplex, -1, -1, 12 },
 	{ Float64x, "Float64x", "_FDX", "_Float64x", "DF64x_", Floating, Float80, Float64xComplex, -1, 13 },
-	{ Float64xComplex, "Float64xComplex", "_FDXC", "_Float64x _Complex", "CDF64x_", Floating, Float128Complex, -1, -1, 13 },
-
-	{ Float80, "Float80", "_F80", "__float80", "Dq", Floating, Float128, Float64xComplex, -1, 14 },
+	{ Float64xComplex, "Float64xComplex", "_FDXC", "_Float64x _Complex", "CDF64x_", Floating, LongDoubleComplex, -1, -1, 13 },
+
+	{ Float80, "Float80", "_F80", "__float80", "Dq", Floating, LongDouble, LongDoubleComplex, -1, 14 },
 	// __float80 _Complex, no complex counterpart
-
-	{ Float128, "Float128", "_FLD", "_Float128", "DF128_", Floating, uuFloat128, Float128Complex, -1, 15 },
-	{ Float128Complex, "Float128Complex", "_FLDC", "_Float128 _Complex", "CDF128_", Floating, LongDoubleComplex, -1, -1, 15 },
-	{ uuFloat128, "uuFloat128", "__FLD", "__float128", "g", Floating, LongDouble, Float128Complex, -1, 16 },
+	// gcc implements long double as float80 (12 bytes)
+	{ LongDouble, "LongDouble", "LD", "long double", "e", Floating, uuFloat128, LongDoubleComplex, -1, 15 },
+	{ LongDoubleComplex, "LongDoubleComplex", "LDC", "long double _Complex", "Ce", Floating, Float128Complex, -1, -1, 15 },
+
+	{ uuFloat128, "uuFloat128", "__FLD", "__float128", "g", Floating, Float128, Float128Complex, -1, 16 },
 	// __float128 _Complex, no complex counterpart
-	{ LongDouble, "LongDouble", "LD", "long double", "e", Floating, Float128x, LongDoubleComplex, -1, 17 },
-	{ LongDoubleComplex, "LongDoubleComplex", "LDC", "long double _Complex", "Ce", Floating, Float128xComplex, -1, -1, 17 },
+	{ Float128, "Float128", "_FLD", "_Float128", "DF128_", Floating, Float128x, Float128Complex, -1, 17 },
+	{ Float128Complex, "Float128Complex", "_FLDC", "_Float128 _Complex", "CDF128_", Floating, Float128xComplex, -1, -1, 17 },
 
 	// may not be supported
@@ -134,4 +135,5 @@
 static Kind commonTypeMatrix[NUMBER_OF_BASIC_TYPES][NUMBER_OF_BASIC_TYPES];
 
+// Fangren explain shortest cost algorithm.
 void generateCosts( int row ) {
 	bool seen[NUMBER_OF_BASIC_TYPES] = { false /*, ... */ };
@@ -174,4 +176,5 @@
 
 		// traverse children
+		// Fangren explain "max"
 		int i = graph[col].left;
 		if ( i == -1 ) continue;						// leaf
@@ -188,4 +191,5 @@
 } // generateCosts
 
+// Fangren explain this routine if you can.
 void generateCommonType( int row, int col ) {			// row <= col
 	if ( costMatrix[row][col] >= 0 ) {
