Changeset 137
- Timestamp:
- 11/15/07 03:34:56 (10 months ago)
- Files:
-
- trunk/blade/Blade.d (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/blade/Blade.d
r136 r137 170 170 { 171 171 char [] result = assertAllVectorLengthsEqual(tree); 172 result ~= "X87VECGEN!(" ~ wrapInQuotes( tree.expression);172 result ~= "X87VECGEN!(" ~ wrapInQuotes(revised.expression); 173 173 char [] vals; 174 /*174 175 175 for (int i=0; i<revised.mapping.length;++i) { 176 176 int x = revised.mapping[i]-'A'; 177 177 char rnk; 178 178 char [] v; 179 char [] t; 179 180 if (x<tree.symbolTable.length) { 180 181 // it's an original symbol 181 182 rnk = tree.symbolTable[x].rank; 182 183 v = tree.symbolTable[x].value; 184 t = tree.symbolTable[x].type; 183 185 } else { 184 186 // it's a compound … … 189 191 else v ~= c; 190 192 } 191 v ~=")"; 192 } 193 if (rnk=='0') result ~= scalartype; 194 else result ~= vectortype; 195 vals ~= "," ~ v; 196 // for vectors, we only need the pointer, not the length 197 if (rnk=='1') vals ~= ".ptr"; 198 } 199 */ 200 for (int i=0; i<tree.symbolTable.length;++i) { 201 char [] t = tree.symbolTable[i].type; 202 if (tree.symbolTable[i].rank=='0') { 193 v ~= ")"; 194 if (rnk=='0') t = "real"; // convert all compounds to real 195 else { // for arrays, the type is the type of the original array 196 t = tree.symbolTable[revised.compounds[x-tree.symbolTable.length][0]].type; 197 } 198 } 199 result ~= ","; 200 if (rnk=='0') { 203 201 // Convert scalars into standard form. 204 202 // long, ulong, and real must become real. 205 203 // We convert everything else to double, since that uses less 206 204 // FPU stack space. 207 if (t == "real" || t == "double" || t == "float") result ~= "," ~t;208 else if (t == "long" || t == "ulong") result ~= " ,real";205 if (t == "real" || t == "double" || t == "float") result ~= t; 206 else if (t == "long" || t == "ulong") result ~= "real"; 209 207 else result ~= "double"; // Convert all other scalars into doubles. 210 208 } 211 else if (startsWith(t, "real[")) result ~= ",real*"; 212 else if (startsWith(t, "float[")) result ~= ",float*"; 213 else if (startsWith(t, "double[")) result~= ",double*"; 214 // else error. 215 vals ~="," ~ tree.symbolTable[i].value; 209 else if (startsWith(t, "real[")) result ~= "real*"; 210 else if (startsWith(t, "float[")) result ~= "float*"; 211 else if (startsWith(t, "double[")) result~= "double*"; 212 vals ~= "," ~ v; 216 213 // for vectors, we only need the pointer, not the length 217 if ( tree.symbolTable[i].rank=='1') vals ~= ".ptr";218 } 214 if (rnk=='1') vals ~= ".ptr"; 215 } 219 216 result ~= ")("; 220 217 int firstVector = findVectorForLength(tree);
