KarolS / millfork

Millfork: a middle-level programming language targeting 6502- and Z80-based microcomputers and home consoles
https://karols.github.io/millfork/
GNU General Public License v3.0
256 stars 21 forks source link

KickC ability - info #85

Closed zbyti closed 4 years ago

zbyti commented 4 years ago

@KarolS please look at this post in your free time: https://atariage.com/forums/topic/312816-kickc-benchmark-tests-cf-mad-pascal-wip/?do=findComment&comment=4668844

https://github.com/markjfisher/kickc-benchmarks

KarolS commented 4 years ago

This is an optimization Millfork is capable of doing, and usually it does it without hitch. Are you familiar with these: https://github.com/KarolS/millfork-benchmarks

zbyti commented 4 years ago

Cool, I'll try to write flames in Millfork and see if compiler generates indirect indexed or indexed only :] THX

Bubble Sort comparison:

//Millfork -Xr
for t,253,downto,0{
  for i,0,to,253{
    n1 = sorttable[i]
    n2 = sorttable[i+1]
    if n1>n2 {
      sorttable[i] = n2
      sorttable[i+1] = n1
    }
  }
}

2025: A9 FE     LDA #$FE
2027: 85 83     STA $83     ;VNTP+1
2029: C6 83     DEC $83     ;VNTP+1
202B: A9 00     LDA #$00
202D: 85 80     STA $80     ;LOMEM
202F: A4 80     LDY $80     ;LOMEM
2031: B9 00 21  LDA $2100,Y
2034: 85 81     STA $81     ;LOMEM+1
2036: B9 01 21  LDA $2101,Y
2039: 85 82     STA $82     ;VNTP
203B: C5 81     CMP $81     ;LOMEM+1
203D: B0 0C     BCS $204B
203F: A5 82     LDA $82     ;VNTP
2041: A4 80     LDY $80     ;LOMEM
2043: 99 00 21  STA $2100,Y
2046: A5 81     LDA $81     ;LOMEM+1
2048: 99 01 21  STA $2101,Y
204B: A5 80     LDA $80     ;LOMEM
204D: C9 FD     CMP #$FD
204F: F0 05     BEQ $2056
2051: E6 80     INC $80     ;LOMEM
2053: 4C 2F 20  JMP $202F
2056: A5 83     LDA $83     ;VNTP+1
2058: D0 CF     BNE $2029
//KickC
for (char loop: 253..0) {
  for (char j: 0..253) {
    char n1 = sortTable[j];
    char n2 = sortTable[j+1];
    if (n1 > n2) {
      sortTable[j]   = n2;
      sortTable[j+1] = n1;
    }
  }
}

2A41: A2 00     LDX #$00
2A43: BC 00 2F  LDY $2F00,X
2A46: BD 01 2F  LDA $2F01,X
2A49: 84 FF     STY $FF     ;FPTR2+1
2A4B: C5 FF     CMP $FF     ;FPTR2+1
2A4D: B0 07     BCS $2A56
2A4F: 9D 00 2F  STA $2F00,X
2A52: 98        TYA
2A53: 9D 01 2F  STA $2F01,X
2A56: E8        INX
2A57: E0 FE     CPX #$FE
2A59: D0 E8     BNE $2A43
2A5B: C6 88     DEC $88     ;STMTAB
2A5D: A9 FF     LDA #$FF
2A5F: C5 88     CMP $88     ;STMTAB
2A61: D0 DE     BNE $2A41
2A63: 60        RTS
zbyti commented 4 years ago

I'll be back with testing with the next Millfork release.

KarolS commented 3 years ago

I worked a bit on optimization in the new version and 0.3.24 should be a bit faster.

zbyti commented 3 years ago

Cool, as soon as I finish writing the tutorial: how to write a game on A8. I will write the Millfork suite to compare it with KickC and Mad Pascal.