+ else if (is_constant_ot(ET[ET[below].right].value.type) && ET[ET[below].right].value.marker == 0) {
+ /* One argument, value known at compile time */
+ int32 arg = ET[ET[below].right].value.value; /* signed */
+ if (arg > 0) {
+ assembly_operand AO;
+ INITAO(&AO);
+ AO.value = arg;
+ set_constant_ot(&AO);
+ assembleg_2(random_gc,
+ AO, stack_pointer);
+ assembleg_3(add_gc, stack_pointer, one_operand,
+ Result);
+ }
+ else {
+ /* This handles zero or negative */
+ assembly_operand AO;
+ INITAO(&AO);
+ AO.value = -arg;
+ set_constant_ot(&AO);
+ assembleg_1(setrandom_gc,
+ AO);
+ assembleg_store(Result, zero_operand);
+ }
+ }