Hi Charles,

Thanks for pointers. I was hoping this function be already present. But if it is not then I can work on it.

The decode routine “local function parse_imm13(op)” is available in dis_arm64.lua so I assumed that encode routine would also be somewhere in the code.

 

Abhishek Dikshit

 

From: Charles Baylis [mailto:charles.baylis@linaro.org]
Sent: Wednesday, July 27, 2016 5:57 AM
To: Dikshit, Abhishek
Cc: luajit@lists.linaro.org
Subject: Re: Looking for a function to encode from number to immr, imms values for ANDS instruction

 

 

 

On 27 July 2016 at 00:27, Dikshit, Abhishek <Abhishek.Dikshit@cavium.com> wrote:

Hi All

The immr and imms values are decoded to get an immediate value. Is there a way to encode from immediate value to immr and imms  field for ARMv8 ?

 

Instruction

 

Routine.

 

 

The DecodeBitMasks routine is not very clear. Any help is appreciated.

 

 

Hi

In lj_emit_arm64.h, there is a stub for the function emit_isk13() which, when implemented, will return the 13 bits representing N:immr:imms if the constant can be encoded using this scheme, or -1 otherwise. Are you working on implementing this function?

To understand how DecodeBitMasks works, I suggest creating some encodings, and disassembling them to see which values are displayed. You can do that as follows:

$ echo "    .inst 0x72000000" > test.s
$ aarch64-linux-gnu-gcc -c test.s
$ aarch64-linux-gnu-objdump -D test.o
test.o:     file format elf64-littleaarch64


Disassembly of section .text:

0000000000000000 <.text>:
   0:   72000000        ands    w0, w0, #0x1

Here, you can see that when N, immr and imms are all zero, the resulting constant has the value of 1. With some experimentation, the explanation in the ARM v8 architecture manual should become clear.

Hope this helps,

Charles