CASL2コードで、ローカル以外のラベルを使わないように修正
[YACASL2.git] / as / FUNC / mull1.casl
1 ;GR1の値とGR2の値の積をGR0に格納
2 MULL    START
3         RPUSH
4         XOR     GR0,GR0         ; 積
5         LAD     GR3,1           ; 対象ビット
6 MLOOP   PUSH    0,GR3           ; ループ先頭。GR2の、GR3が示したビットが0の場合、MNEXTへジャンプ
7         AND     GR3,GR2         ; ↓
8         POP     GR3             ; ↓
9         JZE     MNEXT           ; ↓
10         ADDL    GR0,GR1         ; GR0 <- GR0 + GR1
11         JOV     MFIN            ; オーバーフローした場合、ループ脱出
12 MNEXT   SLL     GR3,1           ; GR3を1回左シフト
13         AND     GR3,GR3         ; (GR3 = 0)の場合、ループ脱出
14         JZE     MFIN            ; ↓
15         CPL     GR3,GR2         ; (GR3 > GR2)の場合、ループ脱出
16         JPL     MFIN            ; ↓
17         SLL     GR1,1           ; GR1を1回左シフト
18         JOV     MFIN            ; オーバーフローした場合、ループ脱出
19         JUMP    MLOOP           ; ループ終端
20 MFIN    RPOP
21         RET
22         END