X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=mjc2wsl.git;a=blobdiff_plain;f=src%2Fmjc2wsl.java;fp=src%2Fmjc2wsl.java;h=11462f4b1acc706c12a3227615635a851f778fa7;hp=18551d13e89223770ff6ec177ef117d30645b74f;hb=1cc5f85fbe5dfa364fe37a3a3cc0d18a0899ca41;hpb=9ad77207956d30c4ad2e3020d389989777e5b7b4 diff --git a/src/mjc2wsl.java b/src/mjc2wsl.java index 18551d1..11462f4 100644 --- a/src/mjc2wsl.java +++ b/src/mjc2wsl.java @@ -523,19 +523,23 @@ public class mjc2wsl{ } case shl: { + prl(createStartVar("tempa", "tempb")); prl(createTopTwoEStack()); prl("VAR :"); prl("\tFOR i:=1 TO tempa STEP 1 DO tempres := tempres * 2 OD;"); prl(createToEStack("tempres")); prl("ENDVAR;"); + prl(createEndVar()); break; } case shr: { + prl(createStartVar("tempa", "tempb")); prl(createTopTwoEStack()); prl("VAR :"); prl("\tFOR i:=1 TO tempa STEP 1 DO tempres := tempres DIV 2 OD;"); prl(createToEStack("tempres")); prl("ENDVAR;"); + prl(createEndVar()); break; } @@ -556,16 +560,20 @@ public class mjc2wsl{ case newarray: { get();// 0 - bytes, 1 - words; ignore for now // TODO take into consideration 0/1 + prl(createStartVar("tempa")); prl(createTopEStack()); prl("mjvm_arrays := mjvm_arrays ++ < ARRAY(tempa,0) >;"); prl(createToEStack("LENGTH(mjvm_arrays)")); + prl(createEndVar()); break; } case aload: case baload: { + prl(createStartVar("tempa", "tempb")); prl(createTopTwoEStack()); prl(createToEStack(createArray("tempb") + "[tempa+1]")); + prl(createEndVar()); break; } case astore: @@ -578,24 +586,30 @@ public class mjc2wsl{ break; } case arraylength: { + prl(createStartVar("tempa", "tempb")); prl(createTopEStack()); prl("tempb := LENGTH("+ createArray("tempa") + ");"); prl(createToEStack("tempb")); + prl(createEndVar()); break; } case dup: { + prl(createStartVar("tempa", "tempb")); prl(createTopEStack()); prl(createToEStack("tempa")); prl(createToEStack("tempa")); + prl(createEndVar()); break; } case dup2: { + prl(createStartVar("tempa", "tempb")); prl(createTopTwoEStack()); prl(createToEStack("tempb")); prl(createToEStack("tempa")); prl(createToEStack("tempb")); prl(createToEStack("tempa")); + prl(createEndVar()); break; }