On Mon, Jan 26, 2009 at 10:01:42PM -0500, Norman Ramsey wrote:
> > I gather this isn't supposed to happen:
> >
> >
> > qc-- -globals -o ACKERMAN ACKERMAN.c--
> > This can't happen: Asked for temporary in space `general-purpose
> > temporaries' with unsupported width 64
> > Fatal error: exception Impossible.Impossible("Asked for temporary in
> > space `general-purpose temporaries' with unsupported width 64")
> > make: *** [ACKERMAN] Error 2
> > hend...@lovesong:~/dv/lang/a68h/workspace$
> >
> > It might be useful if a this-can't-happen were to produce the source
> > line number of the construct occasioning the problem.
>
> this-can't-happen means that the compiler has become so sick that it
> can't continue. source coordinates are but a distant memory.
> We usually get a stack trace, which is useful...
>
> > ACKERMAN.c-- is 483 lines. Do you want a copy?
>
> Yes. Though I can't see doing anything about it until after the ICFP
> deadline (March 2). I can guess where this message is coming from,
> and the code is foul. Very foul.
>
OK. Here it is. It almost certainly won't run correctly even if C-- is
fixed, because it uses some external references to assembler code that
was available on the 360, and because my front-end compiler hasn't
been debugged yet. But here it is:
target memsize 8 byteorder little pointersize 32 wordsize 32;
export H3 as "main";
/* entry point of type D */
H20(bits32 H21/* parameters */, bits32 H26/* parend */){
/* prefix code at routine entry */
bits32 H34;
/* end prefix code */
stackdata { align 8; H23:
bits8[40];
}
/* make display */bits32[H23] = bits32[H21];
bits32[H23+4] = H21;
/* display made *//* copy parameters into local variables */
/*parameters copied */
/*bounds for array declarer */
bits32[(H23)+32 /* H33 */ ] = H26;
bits32[(bits32[(H23)+32 /* H33 */ ])+0 /* H25+H30 */ ] = 1::bits32;
bits32[(bits32[(H23)+32 /* H33 */ ])+0 /* H25+H31 */ ] = 0::bits32;
/* compute strides and size */
bits32[(bits32[(H23)+32 /* H33 */ ])+0 /* H25+H32 */ ] = 1::bits32;
H34 = (bits32[(bits32[(H23)+32 /* H33 */ ])+0 /* H25+H31 */ ] -
bits32[(bits32[(H23)+32 /* H33 */ ])+0 /* H25+H30 */ ] + 1::bits32) *
1::bits32;
if H34 < 0::bits32 {H34 = 0::bits32;}
bits32[(H23)+36 /* H35 */ ] = H26;
bits32[(bits32[(H23)+36 /* H35 */ ])+0 /* H24 */ ] = H34;
return;
}
/* end of called code of type D */
/* entry point of type */
H37(bits32 H38/* parameters */, bits32 H41, bits64 H43, bits32 H54, bits32 H61,
bits32 H63/* parend */){
/* prefix code at routine entry */
/* end prefix code */
stackdata { align 8; H40:
bits8[77];
}
/* make display */bits32[H40] = bits32[H38];
bits32[H40+4] = H38;
/* display made *//* copy parameters into local variables */
bits32[(H40)+32 /* H42 */ ]=H41;
bits64[(H40)+36 /* H44 */ ]=H43;
bits32[(H40)+44 /* H55 */ ]=H54;
bits32[(H40)+48 /* H62 */ ]=H61;
bits32[(H40)+52 /* H64 */ ]=H63;
/*parameters copied */
/* 16 "a68 source" */
bits32 H71;
H71 = foreign "C" malloc(1::bits32);
bits32[(H40)+72 /* H69 */ ] = H71;
bits64[bits32[(H40)+72 /* H69 */ ]] = bits64[(H40)+36 /* H44 */ ];
bits32 H72;
H72 = foreign "C" malloc(1::bits32);
bits32[(H40)+68 /* H68 */ ] = H72;
bits32[bits32[(H40)+68 /* H68 */ ]] = bits32[(H40)+44 /* H55 */ ];
bits32 H73;
H73 = foreign "C" malloc(1::bits32);
bits32[(H40)+64 /* H67 */ ] = H73;
bits32[bits32[(H40)+64 /* H67 */ ]] = bits32[(H40)+48 /* H62 */ ];
bits32 H74;
H74 = foreign "C" malloc(1::bits32);
bits32[(H40)+60 /* H66 */ ] = H74;
bits32[bits32[(H40)+60 /* H66 */ ]] = bits32[(H40)+52 /* H64 */ ];
bits32 H75;
H75 = foreign "C" malloc(1::bits32);
bits32[(H40)+56 /* H65 */ ] = H75;
bits8[bits32[(H40)+56 /* H65 */ ]] = 0::bits8;
/* 17 "a68 source" */
foreign "C" OPENOUT(bits32[(H40)+32 /* H42 */ ], bits32[(H40)+72 /* H69 */ ],
bits32[(H40)+68 /* H68 */ ], bits32[(H40)+64 /* H67 */ ], bits32[(H40)+60 /*
H66 */ ], bits32[(H40)+56 /* H65 */ ]);
/* 18 "a68 source" */
bits8[(H40)+76 /* H70 */ ] = bits8[bits32[(H40)+56 /* H65 */ ]];
return(bits8[(H40)+76 /* H70 */ ]);
}
/* end of called code of type */
/* entry point of type */
H77(bits32 H78/* parameters */, bits32 H81/* parend */){
/* prefix code at routine entry */
/* end prefix code */
stackdata { align 8; H80:
bits8[36];
}
/* make display */bits32[H80] = bits32[H78];
bits32[H80+4] = H78;
/* display made *//* copy parameters into local variables */
bits32[(H80)+32 /* H82 */ ]=H81;
/*parameters copied */
foreign "C" CLOSEOUT(bits32[(H80)+32 /* H82 */ ]);
return;
}
/* end of called code of type */
/* entry point of type */
H93(bits32 H94/* parameters */, bits8 H97/* parend */){
/* prefix code at routine entry */
/* end prefix code */
stackdata { align 8; H96:
bits8[33];
}
/* make display */bits32[H96] = bits32[H94];
bits32[H96+4] = H94;
/* display made *//* copy parameters into local variables */
bits8[(H96)+32 /* H98 */ ]=H97;
/*parameters copied */
/* 28 "a68 source" */
bits8[bits32[(bits32[H96+8])+80 /* H15 */ ]] = ' ';
bits32[bits32[(bits32[H96+8])+76 /* H14 */ ]] = 1::bits32;
bits8[bits32[(bits32[H96+8])+72 /* H13 */ ]] = bits8[(H96)+32 /* H98 */ ];
bits8[bits32[(bits32[H96+8])+68 /* H12 */ ]] = 0::bits8;
bits8[bits32[(bits32[H96+8])+64 /* H11 */ ]] = 0::bits8;
/* 29 "a68 source" */
foreign "C" PUT(bits32[(bits32[H96+8])+84 /* H16 */ ],
bits32[(bits32[H96+8])+80 /* H15 */ ], bits32[(bits32[H96+8])+76 /* H14 */ ],
bits32[(bits32[H96+8])+72 /* H13 */ ], bits32[(bits32[H96+8])+68 /* H12 */ ],
bits32[(bits32[H96+8])+64 /* H11 */ ]);
return;
}
/* end of called code of type */
/* entry point of type */
H100(bits32 H101/* parameters *//* parend */){
/* prefix code at routine entry */
/* end prefix code */
stackdata { align 8; H103:
bits8[30];
}
/* make display */bits32[H103] = bits32[H101];
bits32[H103+4] = H101;
/* display made *//* copy parameters into local variables */
/*parameters copied */
bits32[bits32[(bits32[H103+8])+76 /* H14 */ ]] = 0::bits32;
bits8[bits32[(bits32[H103+8])+68 /* H12 */ ]] = 0::bits8;
bits8[bits32[(bits32[H103+8])+64 /* H11 */ ]] = 255U::bits8;
/* 33 "a68 source" */
foreign "C" PUT(bits32[(bits32[H103+8])+84 /* H16 */ ],
bits32[(bits32[H103+8])+80 /* H15 */ ], bits32[(bits32[H103+8])+76 /* H14 */ ],
bits32[(bits32[H103+8])+72 /* H13 */ ], bits32[(bits32[H103+8])+68 /* H12 */ ],
bits32[(bits32[H103+8])+64 /* H11 */ ]);
return;
}
/* end of called code of type */
section "data" { align 4;
H130:
bits32 {H125};
bits32 {1};
bits32 {10};
bits32 {1};
}section "data" {
H125: bits8[] "0987654321";
}
/* entry point of type */
H115(bits32 H116/* parameters */, bits32 H119/* parend */){
/* prefix code at routine entry */
bits32 H124;
bits32 H132;
bits32 H133;
bits32 H134;
bits32 H135;
/* end prefix code */
stackdata { align 8; H118:
bits8[56];
}
/* make display */bits64[H118] = bits64[H116];
bits32[H118+8] = H116;
/* display made *//* copy parameters into local variables */
bits32[(H118)+32 /* H120 */ ]=H119;
/*parameters copied */
/* 40 "a68 source" */
bits8 H123;
if %eq(bits32[(H118)+32 /* H120 */ ], 0::bits32){ H123= 255U::bits8;} else{
H123= 0::bits8;}
if H123 == 0::bits8 { goto H121;}
/* 41 "a68 source" */
goto H122;
H121:
H124=%div(bits32[(H118)+32 /* H120 */ ],10::bits32);
bits32[(bits32[H118+12])+36 /* H111+H2 */ ](bits32[(bits32[H118+12])+40 /*
H111+H1 */ ], H124);
bits128[(H118)+36 /* H131 */ ] = bits128[(bits32[H118+12])+0 /* H130 */ ];
H133=%mod(bits32[(H118)+32 /* H120 */ ],10::bits32);
H132=%add(H133,1::bits32);
H134 = H132;
if H134>bits32[(H118)+36 /* H131+H129+H31 */ ]{ /* TODO: out-of-bounds trap */
};
H134=H134-bits32[(H118)+36 /* H131+H129+H30 */ ];
if H134<bits32[(H118)+36 /* H131+H129+H30 */ ]{ /* TODO: out-of-bounds trap */
};
H134 = H134 * bits32[(H118)+36 /* H131+H129+H32 */ ] + (((0::bits32)));
H135 = bits32[(H118)+36 /* H131+H128 */ ] + H134;
bits32[(H118)+52 /* H136 */ ] = H135;
bits32[(bits32[H118+12])+56 /* H10+H2 */ ](bits32[(bits32[H118+12])+60 /*
H10+H1 */ ], bits8[bits32[(H118)+52 /* H136 */ ]]);
H122:
return;
}
/* end of called code of type */
/* entry point of type */
H105(bits32 H106/* parameters */, bits32 H109/* parend */){
/* prefix code at routine entry */
bits32 H142;
/* end prefix code */
stackdata { align 8; H108:
bits8[56];
}
/* make display */bits32[H108] = bits32[H106];
bits32[H108+4] = H106;
/* display made *//* copy parameters into local variables */
bits32[(H108)+32 /* H110 */ ]=H109;
/*parameters copied */
/* 38 "a68 source" */
bits32[(bits32[H108+8])+56 /* H10+H2 */ ](bits32[(bits32[H108+8])+60 /* H10+H1
*/ ], ' ');
/* 39 "a68 source" */
bits32[(H108)+48 /* H137+H2 */ ] = H115;
bits32[(H108)+52 /* H137+H1 */ ] = bits32[H108 + -0000000004];
bits64[(H108)+36 /* H111 */ ] = bits64[(H108)+48 /* H137 */ ];
/* 43 "a68 source" */
bits8 H138;
if %lt(bits32[(H108)+32 /* H110 */ ], 0::bits32){ H138= 255U::bits8;} else{
H138= 0::bits8;}
bits8[(H108)+44 /* H114 */ ] = H138;
if H138 == 0::bits8 { goto H112;}
bits32[(bits32[H108+8])+56 /* H10+H2 */ ](bits32[(bits32[H108+8])+60 /* H10+H1
*/ ], '-');
/* 44 "a68 source" */
bits32[(H108)+36 /* H111+H2 */ ](bits32[(H108)+40 /* H111+H1 */ ],
bits32[(H108)+32 /* H110 */ ]);
goto H113;
H112:
bits8 H141;
if %eq(bits32[(H108)+32 /* H110 */ ], 0::bits32){ H141= 255U::bits8;} else{
H141= 0::bits8;}
if H141 == 0::bits8 { goto H139;}
/* 45 "a68 source" */
bits32[(bits32[H108+8])+56 /* H10+H2 */ ](bits32[(bits32[H108+8])+60 /* H10+H1
*/ ], '0');
goto H140;
H139:
/* 46 "a68 source" */
H142=%neg(bits32[(H108)+32 /* H110 */ ]);
bits32[(H108)+36 /* H111+H2 */ ](bits32[(H108)+40 /* H111+H1 */ ], H142);
H140:
H113:
return;
}
/* end of called code of type */
/* entry point of type */
H151(bits32 H152/* parameters */, bits32 H155, bits32 H157/* parend */){
/* prefix code at routine entry */
bits32 H163;
bits32 H168;
bits32 H170;
bits32 H172;
/* end prefix code */
stackdata { align 8; H154:
bits8[56];
}
/* make display */bits32[H154] = bits32[H152];
bits32[H154+4] = H152;
/* display made *//* copy parameters into local variables */
bits32[(H154)+32 /* H156 */ ]=H155;
bits32[(H154)+36 /* H158 */ ]=H157;
/*parameters copied */
/* 51 "a68 source" */
/* 52 "a68 source" */
/* 51 "a68 source" */
bits8 H162;
if %eq(bits32[(H154)+32 /* H156 */ ], 0::bits32){ H162= 255U::bits8;} else{
H162= 0::bits8;}
if H162 == 0::bits8 { goto H160;}
/* 52 "a68 source" */
/* 53 "a68 source" */
/* 52 "a68 source" */
H163=%add(bits32[(H154)+36 /* H158 */ ],1::bits32);
bits32[(H154)+40 /* H159 */ ] = H163;
goto H161;
H160:
/* 53 "a68 source" */
/* 54 "a68 source" */
/* 53 "a68 source" */
bits8 H166;
if %eq(bits32[(H154)+36 /* H158 */ ], 0::bits32){ H166= 255U::bits8;} else{
H166= 0::bits8;}
if H166 == 0::bits8 { goto H164;}
/* 54 "a68 source" */
H168=%sub(bits32[(H154)+32 /* H156 */ ],1::bits32);
bits32[(bits32[H154+8])+32 /* H7+H2 */ ](bits32[(bits32[H154+8])+36 /* H7+H1 */
], H168, 1::bits32);
bits32[(H154)+40 /* H159 */ ] = bits32[(H154)+44 /* H167 */ ];
goto H165;
H164:
/* 55 "a68 source" */
H170=%sub(bits32[(H154)+32 /* H156 */ ],1::bits32);
H172=%sub(bits32[(H154)+36 /* H158 */ ],1::bits32);
bits32[(bits32[H154+8])+32 /* H7+H2 */ ](bits32[(bits32[H154+8])+36 /* H7+H1 */
], bits32[(H154)+32 /* H156 */ ], H172);
bits32[(bits32[H154+8])+32 /* H7+H2 */ ](bits32[(bits32[H154+8])+36 /* H7+H1 */
], H170, bits32[(H154)+52 /* H171 */ ]);
bits32[(H154)+40 /* H159 */ ] = bits32[(H154)+48 /* H169 */ ];
H165:
bits32[(H154)+40 /* H159 */ ] = bits32[(H154)+40 /* H159 */ ];
H161:
return(bits32[(H154)+40 /* H159 */ ]);
}
/* end of called code of type */
import malloc;
/* main entry point */ foreign "C" H3(bits32 H4/* parameters *//* parend */){
/* prefix code at routine entry */
import PUT;
import CLOSEOUT;
import OPENOUT;
bits32 H145;
bits32 H150;
/* end prefix code */
stackdata { align 8; H6:
bits8[196];
}
/* make display */bits32[H6+0] = H4;
/* display made *//* copy parameters into local variables */
/*parameters copied */
/* 0 "a68 source" */
/* 2 "a68 source" */
bits32[(H6)+112 /* H36+H2 */ ] = H20;
bits32[(H6)+116 /* H36+H1 */ ] = H6;
bits64[(H6)+104 /* H19 */ ] = bits64[(H6)+112 /* H36 */ ];
/* 6 "a68 source" */
/* 9 "a68 source" */
/* 14 "a68 source" */
/* 15 "a68 source" */
bits32[(H6)+120 /* H76+H2 */ ] = H37;
bits32[(H6)+124 /* H76+H1 */ ] = bits32[H6 + -0000000004];
bits64[(H6)+96 /* H18 */ ] = bits64[(H6)+120 /* H76 */ ];
/* 20 "a68 source" */
bits32[(H6)+128 /* H83+H2 */ ] = H77;
bits32[(H6)+132 /* H83+H1 */ ] = bits32[H6 + -0000000004];
bits64[(H6)+88 /* H17 */ ] = bits64[(H6)+128 /* H83 */ ];
/* 22 "a68 source" */
bits32 H84;
H84 = foreign "C" malloc(1::bits32);
bits32[(H6)+84 /* H16 */ ] = H84;
/* 23 "a68 source" */
bits8[(H6)+140 /* H86+H46 */ ] = 'S';
bits8[(H6)+141 /* H86+H47 */ ] = 'Y';
bits8[(H6)+142 /* H86+H48 */ ] = 'S';
bits8[(H6)+143 /* H86+H49 */ ] = 'P';
bits8[(H6)+144 /* H86+H50 */ ] = 'R';
bits8[(H6)+145 /* H86+H51 */ ] = 'I';
bits8[(H6)+146 /* H86+H52 */ ] = 'N';
bits8[(H6)+147 /* H86+H53 */ ] = 'T';
bits8[(H6)+148 /* H87+H57 */ ] = 'V';
bits8[(H6)+149 /* H87+H58 */ ] = 'B';
bits8[(H6)+150 /* H87+H59 */ ] = ' ';
bits8[(H6)+151 /* H87+H60 */ ] = ' ';
bits32[(H6)+96 /* H18+H2 */ ](bits32[(H6)+100 /* H18+H1 */ ], bits32[(H6)+84 /*
H16 */ ], bits64[(H6)+140 /* H86 */ ], bits32[(H6)+148 /* H87 */ ], 80::bits32,
80::bits32);
/* 25 "a68 source" */
bits32 H88;
H88 = foreign "C" malloc(1::bits32);
bits32[(H6)+80 /* H15 */ ] = H88;
bits32 H89;
H89 = foreign "C" malloc(1::bits32);
bits32[(H6)+76 /* H14 */ ] = H89;
bits32 H90;
H90 = foreign "C" malloc(1::bits32);
bits32[(H6)+72 /* H13 */ ] = H90;
bits32 H91;
H91 = foreign "C" malloc(1::bits32);
bits32[(H6)+68 /* H12 */ ] = H91;
bits32 H92;
H92 = foreign "C" malloc(1::bits32);
bits32[(H6)+64 /* H11 */ ] = H92;
/* 27 "a68 source" */
bits32[(H6)+152 /* H99+H2 */ ] = H93;
bits32[(H6)+156 /* H99+H1 */ ] = bits32[H6 + -0000000004];
bits64[(H6)+56 /* H10 */ ] = bits64[(H6)+152 /* H99 */ ];
/* 32 "a68 source" */
bits32[(H6)+160 /* H104+H2 */ ] = H100;
bits32[(H6)+164 /* H104+H1 */ ] = bits32[H6 + -0000000004];
bits64[(H6)+48 /* H9 */ ] = bits64[(H6)+160 /* H104 */ ];
/* 36 "a68 source" */
bits32[(H6)+56 /* H10+H2 */ ](bits32[(H6)+60 /* H10+H1 */ ], 'h');
bits32[(H6)+56 /* H10+H2 */ ](bits32[(H6)+60 /* H10+H1 */ ], 'a');
bits32[(H6)+56 /* H10+H2 */ ](bits32[(H6)+60 /* H10+H1 */ ], 'H');
bits32[(H6)+56 /* H10+H2 */ ](bits32[(H6)+60 /* H10+H1 */ ], 'A');
bits32[(H6)+48 /* H9+H2 */ ](bits32[(H6)+52 /* H9+H1 */ ]);
/* 37 "a68 source" */
bits32[(H6)+168 /* H143+H2 */ ] = H105;
bits32[(H6)+172 /* H143+H1 */ ] = bits32[H6 + -0000000004];
bits64[(H6)+40 /* H8 */ ] = bits64[(H6)+168 /* H143 */ ];
/* 48 "a68 source" */
H145=%neg(10::bits32);
bits32[(H6)+176 /* H144 */ ] = H145;
H146:
H150 = 1::bits32;
if H150 == 0::bits32{ goto H148;}
if H150 > 0::bits32{ goto H149;}
if bits32[(H6)+176 /* H144 */ ] < 10::bits32{ goto H147;}
goto H148;
H149:
if bits32[(H6)+176 /* H144 */ ] > 10::bits32{ goto H147;}
H148:
bits32[(H6)+40 /* H8+H2 */ ](bits32[(H6)+44 /* H8+H1 */ ], bits32[(H6)+176 /*
H144 */ ]);
bits32[(H6)+48 /* H9+H2 */ ](bits32[(H6)+52 /* H9+H1 */ ]);
bits32[(H6)+48 /* H9+H2 */ ](bits32[(H6)+52 /* H9+H1 */ ]);
bits32[(H6)+176 /* H144 */ ] = bits32[(H6)+176 /* H144 */ ] + 1::bits32;
goto H146;
H147:
/* 50 "a68 source" */
bits32[(H6)+180 /* H173+H2 */ ] = H151;
bits32[(H6)+184 /* H173+H1 */ ] = bits32[H6 + -0000000004];
bits64[(H6)+32 /* H7 */ ] = bits64[(H6)+180 /* H173 */ ];
/* 58 "a68 source" */
bits32[(H6)+188 /* H174 */ ] = 0::bits32;
H175:
/* 59 "a68 source" */
bits32[(H6)+56 /* H10+H2 */ ](bits32[(H6)+60 /* H10+H1 */ ], 'a');
bits32[(H6)+56 /* H10+H2 */ ](bits32[(H6)+60 /* H10+H1 */ ], 'c');
bits32[(H6)+56 /* H10+H2 */ ](bits32[(H6)+60 /* H10+H1 */ ], 'k');
bits32[(H6)+56 /* H10+H2 */ ](bits32[(H6)+60 /* H10+H1 */ ], '(');
bits32[(H6)+40 /* H8+H2 */ ](bits32[(H6)+44 /* H8+H1 */ ], 3::bits32);
bits32[(H6)+56 /* H10+H2 */ ](bits32[(H6)+60 /* H10+H1 */ ], ',');
bits32[(H6)+40 /* H8+H2 */ ](bits32[(H6)+44 /* H8+H1 */ ], bits32[(H6)+188 /*
H174 */ ]);
bits32[(H6)+56 /* H10+H2 */ ](bits32[(H6)+60 /* H10+H1 */ ], ')');
bits32[(H6)+56 /* H10+H2 */ ](bits32[(H6)+60 /* H10+H1 */ ], '=');
/* 60 "a68 source" */
bits32[(H6)+32 /* H7+H2 */ ](bits32[(H6)+36 /* H7+H1 */ ], 3::bits32,
bits32[(H6)+188 /* H174 */ ]);
bits32[(H6)+40 /* H8+H2 */ ](bits32[(H6)+44 /* H8+H1 */ ], bits32[(H6)+192 /*
H177 */ ]);
bits32[(H6)+48 /* H9+H2 */ ](bits32[(H6)+52 /* H9+H1 */ ]);
/* 61 "a68 source" */
bits32[(H6)+48 /* H9+H2 */ ](bits32[(H6)+52 /* H9+H1 */ ]);
bits32[(H6)+188 /* H174 */ ] = bits32[(H6)+188 /* H174 */ ] + 1::bits32;
goto H175;
H176:
/* 63 "a68 source" */
bits32[(H6)+88 /* H17+H2 */ ](bits32[(H6)+92 /* H17+H1 */ ], bits32[(H6)+84 /*
H16 */ ]);
return;
}
/* end of called code of type P */
>
> Norman
_______________________________________________
Cminusminus mailing list
[email protected]
https://cminusminus.org/mailman/listinfo/cminusminus