<c>: ff e0 jmp %eax # and jump to it.
# the callee cleans up the stack
*/
- if ((adjustor = stgMallocBytes(14, "createAdjustor")) != NULL) {
+ adjustor = stgMallocBytes(14, "createAdjustor");
+ {
unsigned char *const adj_code = (unsigned char *)adjustor;
adj_code[0x00] = (unsigned char)0x58; /* popl %eax */
That's (thankfully) the case here with the restricted set of
return types that we support.
*/
- if ((adjustor = stgMallocBytes(17, "createAdjustor")) != NULL) {
+ adjustor = stgMallocBytes(17, "createAdjustor");
+ {
unsigned char *const adj_code = (unsigned char *)adjustor;
adj_code[0x00] = (unsigned char)0x68; /* pushl hptr (which is a dword immediate ) */
similarly, and local variables should be accessed via %fp, not %sp. In a
nutshell: This should work! (Famous last words! :-)
*/
- if ((adjustor = stgMallocBytes(4*(11+1), "createAdjustor")) != NULL) {
+ adjustor = stgMallocBytes(4*(11+1), "createAdjustor");
+ {
unsigned long *const adj_code = (unsigned long *)adjustor;
adj_code[ 0] = 0x9C23A008UL; /* sub %sp, 8, %sp */
4 bytes (getting rid of the nop), hence saving memory. [ccshan]
*/
ASSERT(((StgWord64)wptr & 3) == 0);
- if ((adjustor = stgMallocBytes(48, "createAdjustor")) != NULL) {
+ adjustor = stgMallocBytes(48, "createAdjustor");
+ {
StgWord64 *const code = (StgWord64 *)adjustor;
code[0] = 0x4610041246520414L;
this code, it only works for up to 6 arguments (when floating point arguments
are involved, this may be more or less, depending on the exact situation).
*/
- if ((adjustor = stgMallocBytes(4*13, "createAdjustor")) != NULL) {
+ adjustor = stgMallocBytes(4*13, "createAdjustor");
+ {
unsigned long *const adj_code = (unsigned long *)adjustor;
// make room for extra arguments