[riscosfr] Re: C from BASIC

  • From: David Feugey <dfeugey@xxxxxxxxx>
  • To: riscosfr@xxxxxxxxxxxxx
  • Date: Sun, 07 Jan 2018 21:42:59 +0100

In message <35340141a197dfffbf237ba3608d58e6@xxxxxxxxxxxxxxxxxxxxxxxx>
          Rick Murray <heyrick@xxxxxxxxx> wrote:


After three hours and countless time staring at the sources (ie
kernel.s.k_body), I gave up. I think we can say that there's a reason
why other people haven't already worked out clever ways to call CLib
functions from BASIC.

C'est très intéressant. Merci d'avoir mené l'enquête :)

Autre option possible, GCC -S, qui sort du code machine brute.

Le HelloW de DDE donne ceci avec GCC -S

     .file "HelloW.c"
     .section .rodata
     .align 2
.LC0:
     .ascii "Hello World\012\000"
     .align 2
.LC1:
     .ascii "Args:\000"
     .align 2
.LC2:
     .ascii " %s\000"
     .align 2
.LC3:
     .ascii "\012\000"
     .text
     .align 2
     .global main
     .ascii "main\000"
     .align 2
     .word 4278190088
     .type main, %function
main:
     @ args = 0, pretend = 0, frame = 12, outgoing = 0
     @ frame_needed = 1, uses_anonymous_args = 0
     mov ip, sp
     stmfd sp!, {r9, fp, ip, lr, pc}
     sub fp, ip, #4
     cmp sp, sl
     bllt __rt_stkovf_split_small
     sub sp, sp, #12
     mov r9, sp
     str r0, [r9, #4]
     str r1, [r9, #8]
     ldr r0, .L6
     bl puts
     ldr r3, [r9, #4]
     cmp r3, #1
     ble .L2
     ldr r0, .L6+4
     bl printf
     mov r3, #0
     str r3, [r9, #0]
     b .L3
.L4:
     ldr r3, [r9, #0]
     mov r3, r3, asl #2
     ldr r2, [r9, #8]
     add r3, r2, r3
     ldr r3, [r3, #0]
     ldr r0, .L6+8
     mov r1, r3
     bl printf
     ldr r3, [r9, #0]
     add r3, r3, #1
     str r3, [r9, #0]
.L3:
     ldr r2, [r9, #0]
     ldr r3, [r9, #4]
     cmp r2, r3
     blt .L4
     ldr r0, .L6+12
     bl puts
.L2:
     mov r3, #0
     mov r0, r3
     ldmea fp, {r9, fp, sp, pc}
.L7:
     .align 2
.L6:
     .word .LC0
     .word .LC1
     .word .LC2
     .word .LC3
     .size main, .-main
     .ident "GCC: (GCCSDK GCC 4.7.4 Release 3) 4.7.4"

Bien sur l'écueil ici est le 'bl printfs'. Mais il ne semble pas y 
avoir de CLib ou équivalent. Pour des calculs purs, sans aucun appel 
système, GCC pourrait donc être intéressant.

Ci-joint le résultat d'un GCC -o. C'est ultra verbeux (merci l'ELF), 
mais on retrouve facilement la partie qui nous intéresse. Il faudrait 
que j'essaie avec des calculs simples pour voir si seuls des registres 
sont utilisés. Si c'est le cas, ça sent bon.

Bye, David
-- 
RISC OS FR - www.riscos.fr
Informations sur RISC OS et sa communauté
Licences ABC et Raspberry Pi gratuits !

Attachment: a.out
Description: application/riscos

Other related posts: