summaryrefslogtreecommitdiff
path: root/rts/Interpreter.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/Interpreter.c')
-rw-r--r--rts/Interpreter.c81
1 files changed, 81 insertions, 0 deletions
diff --git a/rts/Interpreter.c b/rts/Interpreter.c
index 165511b24c..0e80593d07 100644
--- a/rts/Interpreter.c
+++ b/rts/Interpreter.c
@@ -1181,6 +1181,48 @@ run_BCO:
goto nextInsn;
}
+ case bci_PUSH8: {
+ int off = BCO_NEXT;
+ Sp_subB(1);
+ *(StgWord8*)Sp = *(StgWord8*)(Sp_plusB(off+1));
+ goto nextInsn;
+ }
+
+ case bci_PUSH16: {
+ int off = BCO_NEXT;
+ Sp_subB(2);
+ *(StgWord16*)Sp = *(StgWord16*)(Sp_plusB(off+2));
+ goto nextInsn;
+ }
+
+ case bci_PUSH32: {
+ int off = BCO_NEXT;
+ Sp_subB(4);
+ *(StgWord32*)Sp = *(StgWord32*)(Sp_plusB(off+4));
+ goto nextInsn;
+ }
+
+ case bci_PUSH8_W: {
+ int off = BCO_NEXT;
+ *(StgWord*)(Sp_minusW(1)) = *(StgWord8*)(Sp_plusB(off));
+ Sp_subW(1);
+ goto nextInsn;
+ }
+
+ case bci_PUSH16_W: {
+ int off = BCO_NEXT;
+ *(StgWord*)(Sp_minusW(1)) = *(StgWord16*)(Sp_plusB(off));
+ Sp_subW(1);
+ goto nextInsn;
+ }
+
+ case bci_PUSH32_W: {
+ int off = BCO_NEXT;
+ *(StgWord*)(Sp_minusW(1)) = *(StgWord32*)(Sp_plusB(off));
+ Sp_subW(1);
+ goto nextInsn;
+ }
+
case bci_PUSH_G: {
int o1 = BCO_GET_LARGE_ARG;
SpW(-1) = BCO_PTR(o1);
@@ -1313,6 +1355,45 @@ run_BCO:
Sp_subW(1); SpW(0) = (W_)&stg_ap_pppppp_info;
goto nextInsn;
+ case bci_PUSH_PAD8: {
+ Sp_subB(1);
+ *(StgWord8*)Sp = 0;
+ goto nextInsn;
+ }
+
+ case bci_PUSH_PAD16: {
+ Sp_subB(2);
+ *(StgWord16*)Sp = 0;
+ goto nextInsn;
+ }
+
+ case bci_PUSH_PAD32: {
+ Sp_subB(4);
+ *(StgWord32*)Sp = 0;
+ goto nextInsn;
+ }
+
+ case bci_PUSH_UBX8: {
+ int o_lit = BCO_GET_LARGE_ARG;
+ Sp_subB(1);
+ *(StgWord8*)Sp = *(StgWord8*)(literals+o_lit);
+ goto nextInsn;
+ }
+
+ case bci_PUSH_UBX16: {
+ int o_lit = BCO_GET_LARGE_ARG;
+ Sp_subB(2);
+ *(StgWord16*)Sp = *(StgWord16*)(literals+o_lit);
+ goto nextInsn;
+ }
+
+ case bci_PUSH_UBX32: {
+ int o_lit = BCO_GET_LARGE_ARG;
+ Sp_subB(4);
+ *(StgWord32*)Sp = *(StgWord32*)(literals+o_lit);
+ goto nextInsn;
+ }
+
case bci_PUSH_UBX: {
int i;
int o_lits = BCO_GET_LARGE_ARG;