Hi,
sorry for chiming in, incidentally I've just started to study the arm
architecture and the ARM1136J-S manual seems clear about a couple of
things

On 8/15/07, Simon Pickering <[EMAIL PROTECTED]> wrote:
> Thank you for the links, these are things I've not seen before.
>
> > So let me dump the stuff I turned up so far:
> >
> > URL: <http://www.scratchpost.org/patches/jazelle-disassembly.png>
> > Here you can see the size and alignment of the java instructions.
> > (the entire document is
> > <http://www.arm.com/pdfs/DUI0066D_ADS1_2_AXD_armsd.pdf>)
>
> Looking at the Memory Processor view in Jazelle state (fig 5-39 on page 5-33 
> of
> the pdf), the left-hand column showing the Address of the bytecodes indicates
> that bytecodes are byte-length (or variable length depending on their
> arguments), not 32bit as we were thinking. This does assume that the Address
> column is showing the address in terms of bytes and not some other unit, but I
> think this is a fair assumption.
>
> The same thing is seen in the disassembler shown in Fig 5-52 on page 5-41.
> Section 6.5 on page 6-9 specifically states that Jazelle assembly instructions
> are 8-bit. So we can conclude that they are byte aligned rather than word
> aligned. I wonder why the word aligned code appeared to work?
>
>
[quote]
The ARM1136JF-S processor has three operating states:

ARM state             32-bit, word-aligned ARM instructions are
executed in this state.
Thumb state           16-bit, halfword-aligned Thumb instructions.
Java state            Variable length, byte-aligned Java instructions.

...
In Java state, all instruction fetches are in words.
[/quote]

> "The key to making this approach work lies in a single new ARM instruction, 
> "BXJ
> Rm," for entering Java state. This instruction first performs a test on one of
> the condition codes. If the condition is met, it then stores the current 
> program
> counter (PC), puts the processor into Java state, branches to the specified
> target address and begins executing Java byte codes."
>
> Performs a test on one of the condition codes.... Which one I wonder? Or is 
> this
> where a Java flag is checked (I'll have to take another look in the chip 
> manual
> pdf). Anyone have any thoughts?
>

Almost all ARM instructions can be optionally executed, that is, the 4
most significant bits of almost every ARM opcode include a condition
code, if the condition is met, the instruction is executed, otherwise
it is equivalent to a NOP,

[quote]
Branch and exchange to Java state: BXJ{cond} <Rm>
[/quote]

if you don't specify a condition, the assembler assumes AL and the
branch is unconditionally executed, nothing fancier than that

some other possible values for {cond} are: EQ (Z=1), NE(Z=0), LT(N!=V), VS (V=1)

> My understanding is that condition codes are N(egative), Z(ero), C(arried 
> over)
> and (o)V(erflow) and that the J bit, which is also in CPSR (and isn't a
> condition code afaik), is set by the BXJ instruction, rather than needing to 
> be
> set before the BXJ instruction. In fact setting this bit is explicitly advised
> against wherever it's mentioned. Therefore do we need to do a CMP before the 
> BXJ
> to get it to do something?
>

[quote]
You can switch the operating state of the ARM1136JF-S processor
between ARM state and Java state using the BXJ instruction.
[/quote]

and also

[quote]
MSR cannot be used to change the J bit in the CPSR.
[/quote]

so, you don't set it, the CPU does, it seems no other setup is
required, but I can't be sure about that

> I don't know whether the BXJ instruction requires the condition code suffix, 
> but
> it certainly compiles without complaint.
>

no suffix means BXJAL

regards,
Paolo
_______________________________________________
maemo-developers mailing list
maemo-developers@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-developers

Reply via email to