1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-02-17 10:30:43 +00:00

Merge remote-tracking branch 'origin/master'

This commit is contained in:
Jesper Gravgaard 2019-06-11 21:52:37 +02:00
commit 7c4a60aea4
9 changed files with 414 additions and 416 deletions

View File

@ -0,0 +1,6 @@
lda {z2}
and {z3}
sta {z1}
lda {z2}+1
and {z3}+1
sta {z1}+1

View File

@ -0,0 +1,7 @@
lda {z2}
clc
adc {z2}+1
sta {z1}
lda {z2}+1
adc #0
sta {z1}+1

View File

@ -0,0 +1,12 @@
lda {z2}
sta {z1}
lda {z2}+1
sta {z1}+1
cpx #0
beq !e+
!:
lsr {z1}+1
ror {z1}
dex
bne !-
!e:

View File

@ -0,0 +1,12 @@
lda {z2}
sta {z1}
lda {z2}+1
sta {z1}+1
cpy #0
beq !e+
!:
lsr {z1}+1
ror {z1}
dey
bne !-
!e:

View File

@ -90,7 +90,7 @@ word div10(word val){
val = (val >> 1) + 1; val = (val >> 1) + 1;
val += val << 1; val += val << 1;
val += val >> 4; val += val >> 4;
val += val >> 4 >> 4; // >> 8 is not supported? val += val >> 8; // >> 8 is not supported? FIXED!
return val >> 4; return val >> 4;
} }

View File

@ -563,12 +563,11 @@ append: {
div10: { div10: {
.label _0 = $21 .label _0 = $21
.label _2 = $23 .label _2 = $23
.label _3 = 4 .label _3 = $25
.label _4 = $25 .label _4 = 4
.label _5 = $25
.label val = $21 .label val = $21
.label val_1 = $23 .label val_1 = $23
.label val_2 = 4 .label val_2 = $25
.label val_3 = 4 .label val_3 = 4
.label return = 4 .label return = 4
.label val_4 = 2 .label val_4 = 2
@ -611,27 +610,25 @@ div10: {
lda val_2+1 lda val_2+1
adc val_1+1 adc val_1+1
sta val_2+1 sta val_2+1
sta _4+1 ldy #8
lda val_2 lda val_2
sta _4 sta _4
ldy #4 lda val_2+1
sta _4+1
cpy #0
beq !e+
!: !:
lsr _4+1 lsr _4+1
ror _4 ror _4
dey dey
bne !- bne !-
ldy #4 !e:
!:
lsr _5+1
ror _5
dey
bne !-
lda val_3 lda val_3
clc clc
adc _5 adc val_2
sta val_3 sta val_3
lda val_3+1 lda val_3+1
adc _5+1 adc val_2+1
sta val_3+1 sta val_3+1
ldy #4 ldy #4
!: !:

View File

@ -390,57 +390,56 @@ div10: scope:[div10] from main::@6
[185] (word) div10::val#1 ← (word) div10::val#0 + (word~) div10::$2 [185] (word) div10::val#1 ← (word) div10::val#0 + (word~) div10::$2
[186] (word~) div10::$3 ← (word) div10::val#1 >> (byte) 4 [186] (word~) div10::$3 ← (word) div10::val#1 >> (byte) 4
[187] (word) div10::val#2 ← (word) div10::val#1 + (word~) div10::$3 [187] (word) div10::val#2 ← (word) div10::val#1 + (word~) div10::$3
[188] (word~) div10::$4 ← (word) div10::val#2 >> (byte) 4 [188] (word~) div10::$4 ← (word) div10::val#2 >> (byte) 8
[189] (word~) div10::$5 ← (word~) div10::$4 >> (byte) 4 [189] (word) div10::val#3 ← (word) div10::val#2 + (word~) div10::$4
[190] (word) div10::val#3 ← (word) div10::val#2 + (word~) div10::$5 [190] (word) div10::return#0 ← (word) div10::val#3 >> (byte) 4
[191] (word) div10::return#0 ← (word) div10::val#3 >> (byte) 4
to:div10::@return to:div10::@return
div10::@return: scope:[div10] from div10 div10::@return: scope:[div10] from div10
[192] return [191] return
to:@return to:@return
div16u: scope:[div16u] from main::@2 div16u: scope:[div16u] from main::@2
[193] (word) divr16u::dividend#1 ← (word) div16u::dividend#0 [192] (word) divr16u::dividend#1 ← (word) div16u::dividend#0
[194] call divr16u [193] call divr16u
[195] (word) divr16u::return#2 ← (word) divr16u::return#0 [194] (word) divr16u::return#2 ← (word) divr16u::return#0
to:div16u::@1 to:div16u::@1
div16u::@1: scope:[div16u] from div16u div16u::@1: scope:[div16u] from div16u
[196] (word) div16u::return#0 ← (word) divr16u::return#2 [195] (word) div16u::return#0 ← (word) divr16u::return#2
to:div16u::@return to:div16u::@return
div16u::@return: scope:[div16u] from div16u::@1 div16u::@return: scope:[div16u] from div16u::@1
[197] return [196] return
to:@return to:@return
divr16u: scope:[divr16u] from div16u divr16u: scope:[divr16u] from div16u
[198] phi() [197] phi()
to:divr16u::@1 to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
[199] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) [198] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 )
[199] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 ) [198] (word) divr16u::quotient#3 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::return#0 )
[199] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#1 divr16u::@3/(word) divr16u::dividend#0 ) [198] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#1 divr16u::@3/(word) divr16u::dividend#0 )
[199] (word) divr16u::rem#4 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#9 ) [198] (word) divr16u::rem#4 ← phi( divr16u/(byte) 0 divr16u::@3/(word) divr16u::rem#9 )
[200] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1 [199] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte) 1
[201] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2
[202] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 [201] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80
[203] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 [202] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2
to:divr16u::@4 to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1 divr16u::@4: scope:[divr16u] from divr16u::@1
[204] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1
to:divr16u::@2 to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
[205] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [204] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[206] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1 [205] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte) 1
[207] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 [206] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1
[208] if((word) divr16u::rem#5<(const word) div16u::divisor#0) goto divr16u::@3 [207] if((word) divr16u::rem#5<(const word) div16u::divisor#0) goto divr16u::@3
to:divr16u::@5 to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2 divr16u::@5: scope:[divr16u] from divr16u::@2
[209] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [208] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[210] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) div16u::divisor#0 [209] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) div16u::divisor#0
to:divr16u::@3 to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
[211] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [210] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[211] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [210] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 )
[212] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [211] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[213] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 [212] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1
to:divr16u::@return to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@3 divr16u::@return: scope:[divr16u] from divr16u::@3
[214] return [213] return
to:@return to:@return

File diff suppressed because it is too large Load Diff

View File

@ -36,9 +36,8 @@
(word()) div10((word) div10::val) (word()) div10((word) div10::val)
(word~) div10::$0 $0 zp ZP_WORD:33 4.0 (word~) div10::$0 $0 zp ZP_WORD:33 4.0
(word~) div10::$2 $2 zp ZP_WORD:35 4.0 (word~) div10::$2 $2 zp ZP_WORD:35 4.0
(word~) div10::$3 $3 zp ZP_WORD:4 4.0 (word~) div10::$3 $3 zp ZP_WORD:37 4.0
(word~) div10::$4 $4 zp ZP_WORD:37 4.0 (word~) div10::$4 $4 zp ZP_WORD:4 4.0
(word~) div10::$5 $5 zp ZP_WORD:37 4.0
(label) div10::@return (label) div10::@return
(word) div10::return (word) div10::return
(word) div10::return#0 return zp ZP_WORD:4 34.33333333333333 (word) div10::return#0 return zp ZP_WORD:4 34.33333333333333
@ -46,7 +45,7 @@
(word) div10::val (word) div10::val
(word) div10::val#0 val zp ZP_WORD:33 3.0 (word) div10::val#0 val zp ZP_WORD:33 3.0
(word) div10::val#1 val#1 zp ZP_WORD:35 3.0 (word) div10::val#1 val#1 zp ZP_WORD:35 3.0
(word) div10::val#2 val#2 zp ZP_WORD:4 2.0 (word) div10::val#2 val#2 zp ZP_WORD:37 3.0
(word) div10::val#3 val#3 zp ZP_WORD:4 4.0 (word) div10::val#3 val#3 zp ZP_WORD:4 4.0
(word) div10::val#4 val#4 zp ZP_WORD:2 103.0 (word) div10::val#4 val#4 zp ZP_WORD:2 103.0
(word()) div16u((word) div16u::dividend , (word) div16u::divisor) (word()) div16u((word) div16u::dividend , (word) div16u::divisor)
@ -303,7 +302,7 @@
(const byte*) zp2#0 zp2 = (byte*) 98 (const byte*) zp2#0 zp2 = (byte*) 98
zp ZP_WORD:2 [ main::u#11 main::u#2 myprintf::w1#6 myprintf::w1#0 myprintf::w1#1 div16u::dividend#0 main::u#15 main::u#4 div10::val#4 ] zp ZP_WORD:2 [ main::u#11 main::u#2 myprintf::w1#6 myprintf::w1#0 myprintf::w1#1 div16u::dividend#0 main::u#15 main::u#4 div10::val#4 ]
zp ZP_WORD:4 [ myprintf::w2#7 myprintf::w2#0 myprintf::w2#1 main::v#1 main::v#2 div16u::return#2 div16u::return#0 div10::return#2 div10::return#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div10::$3 div10::val#2 div10::val#3 ] zp ZP_WORD:4 [ myprintf::w2#7 myprintf::w2#0 myprintf::w2#1 main::v#1 main::v#2 div16u::return#2 div16u::return#0 div10::return#2 div10::return#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div10::$4 div10::val#3 ]
zp ZP_WORD:6 [ myprintf::w3#7 myprintf::w3#0 myprintf::w3#1 main::$3 main::$12 main::$2 main::$11 ] zp ZP_WORD:6 [ myprintf::w3#7 myprintf::w3#0 myprintf::w3#1 main::$3 main::$12 main::$2 main::$11 ]
zp ZP_WORD:8 [ myprintf::str#10 myprintf::str#5 myprintf::str#0 ] zp ZP_WORD:8 [ myprintf::str#10 myprintf::str#5 myprintf::str#0 ]
zp ZP_BYTE:10 [ myprintf::bFormat#10 myprintf::bFormat#4 ] zp ZP_BYTE:10 [ myprintf::bFormat#10 myprintf::bFormat#4 ]
@ -341,6 +340,6 @@ reg byte a [ utoa::$16 ]
reg byte a [ utoa::$17 ] reg byte a [ utoa::$17 ]
zp ZP_WORD:33 [ div10::$0 div10::val#0 ] zp ZP_WORD:33 [ div10::$0 div10::val#0 ]
zp ZP_WORD:35 [ div10::$2 div10::val#1 ] zp ZP_WORD:35 [ div10::$2 div10::val#1 ]
zp ZP_WORD:37 [ div10::$4 div10::$5 ] zp ZP_WORD:37 [ div10::$3 div10::val#2 ]
reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ] reg byte a [ divr16u::$2 ]