Re: Porting to arm/aarch64

Jasper Taylor <[email protected]> Mon, 29 Jun 2020 10:49:45 +0100
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <[email protected]>
OK, I am having a bit of a problem here...

I have configured gprolog on the ARM with --disable-regs, because if I 
did not do this I was getting warnings about call-clobbered registers 
that I didn't understand. I figured I could always add in the registers 
later once I have it working for the simplest case.

However, a lot of the code in the asm_inst.s manipulates the pl_reg_bank 
by putting a pointer to it in a data field at the end of the generated 
procedure, something like this:

TRANS_pl_ret:
     @ args = 0, pretend = 0, frame = 0
     @ frame_needed = 1, uses_anonymous_args = 0
     @ link register save eliminated.
     str    fp, [sp, #-4]!
     add    fp, sp, #0
     ldr    r3, .L27
     ldr    r3, [r3]
     add    r3, r3, #1040
     ldr    r3, [r3]
     mov    pc, r3    @ indirect register jump
.L28:
     .align    2
.L27:
     .word    pl_reg_bank

...which is fine if I am generating pl_ret or pl_fail, but trying to 
translate a register operation that comes in the middle of the procedure 
then I have to put the data field in and jump over it, which seems 
wasteful. Wondering if I can put a single reference to pl_reg_bank in 
the data field at the end of the code, along with the strings, and use 
it for all the register references. I guess this sort of thing is the 
reason we have to write a mini-assembly translator for each new 
platform, rather than just have the WAM generated in c which can be 
compiled!

Cheers

     Jasper

On 27/06/2020 09:21, Daniel Diaz wrote:
> Hi Jasper,
>
> Sorry again for late reply (the end of year at my University is pretty 
> hard…).
> Don’t worry about Code_Start for the moment, simply emit the function 
> entry point (label). You’ll see later if you need to do some 
> adjustments (e.g. stack).
>
> Daniel
>
>
>> Le 15 juin 2020 à 11:51, Jasper Taylor <[email protected] 
>> <mailto:[email protected]>> a écrit :
>>
>> Hi Daniel,
>>
>> I've read the PORTING file but it's pretty incomplete in describing 
>> the task. I'm currently stalled trying to figure out how to implement 
>> the Code_Start function in the translation file. For most of the 
>> functions I can see where the translation comes from in the output of 
>> compiling asm_inst.c to assembler, but not for Code_Start -- that 
>> seems to depend on saving and restoring some registers that Prolog is 
>> using, so an equivalent cannot be made by the c compiler.
>>
>> I am using the powerpc_any.c file as a starting point, as I have 
>> powerpc hardware I can build stuff on and it looks more like a RISC 
>> architecture so more similar to the ARM than x86.
>>
>> Also I haven't been able to figure out what registers to use on the 
>> ARM, as some are call-clobbered and this seems to cause problems for 
>> using them in assembly language.
>>
>> Cheers
>>
>>     Jasper
>>
>> On 12/06/2020 13:35, Daniel Diaz wrote:
>>> Hi Jasper,
>>>
>>> Sorry for the late reply,
>>>
>>> You can have a look at the PORTING file which gives some information 
>>> about adding a new architecture.
>>> The main task is to write a mapper from MiniAssembly to Asm. See 
>>> example files in src/Ma2Asm which contains mapper MA->ASM for 
>>> various architectures.
>>> The mappers are written in C (it is a good idea to use another 
>>> mapper as basis) .Maybe look at the file mips_irix.c file.
>>> I generally look at the asm generated by gcc (using various 
>>> optimization flags in order to understand the asm generated, -O0 to 
>>> -O3).
>>> For this you can look at src/Ma2Asm/FromC. Do a make (modify 
>>> Makefile to test with various CFLAGS). It compiles asm_inst.c to asm 
>>> ; the study of asm_inst.s gives you hints about the translation of 
>>> MA instructions.
>>> Maybe you need to adapt the asm_inst.c file.
>>> Basically it contains C functions whose translation to asm helps you 
>>> to write the mapper (the name of C functions are useful to know what 
>>> Ma instruction it corresponds).
>>>
>>> Don’t hesitate to write me directly if you need more help (by mail 
>>> to [email protected]).
>>>
>>> Daniel
>>>
>>>> Le 30 mai 2020 à 16:39, Jasper Taylor <[email protected] 
>>>> <mailto:[email protected]>> a écrit :
>>>>
>>>> Hi all,
>>>>
>>>> I am thinking about trying to port GNU prolog to the ARM 
>>>> architecture (linux os). Before I get started, has anyone already 
>>>> had a go at this, if so, how far did you get and what problems did 
>>>> you encounter?
>>>>
>>>> Thanks for reading
>>>>
>>>>     --Jasper
>>>>
>>>>
>>>>
>>>
>