Is anyone planning on writing a document describing how tau operands are used? It has taken me a lot of time digging through the code to try to understand it (and my understanding is probably still incomplete).

It would be good to save other people from some of the pain.  :-)

Naveen

On Mar 1, 2007, at 5:46 AM, Egor Pasko wrote:

On the 0x28C day of Apache Harmony Estelle Liu wrote:
hi,
there are some tau instructions of HIR such as Op_TauDiv and Op_TauLdInd,
what do they stand for?
How can I get descriptions about HIR instructions?

Estelle,

there is no complete reference guide for HIR instructions yet. How do
we tell what operations' semantics are?  The
jitrino/src/optimizer/Opcode.cpp file helps. For example:

description:
{ Op_TauDiv, false, MB::Movable, MK::Signed_and_Strict, "div ", "div% m %0,%1 ((%2)) -) %l", }, // (opnds must already be checked for 0/overflow)

"div" says it is division. On printing it tells about 3 source
operands (%0, %1, %2) and one destination operand (%l). Operand ((%2))
is a "tau-operand" (because in double-brachets) that comes from
instruction performing a zero-check (with this tau-operand we ensure
that zero-check is performed before the actual division).

description2:
{ Op_TauLdInd, false, MB::Load, MK::AutoCompress_Speculative, "ldind", "ldind% m:%t [%0] ((%1,%2)) -) %l", },

This is an indirect load from memory :)
Checked with two tau operands (null-check and bounds-check, AFAIR)

--
Egor Pasko


Reply via email to