I asked the c64x+ compiler team in TI about this and here's their
response:

.phead has nothing to do with floating point.

 It stands for fetch packet header, and describes how the C64x+ fetches
a predetermined plural number of instructions each operation cycle. A
predetermined one of these instructions is used as a special header.
This special header has a unique encoding different from any normal
instruction. When decoded this special header instructs decode hardware
to decode this fetch packet in a special way.

 Normally this is generated by the assembler and is not exposed to the
user.

 Up till now, all C6000 instructions were 32 bit.  On the C64x+ core,
there is a 16-bit instruction set that can be used.

So, commonly used 32 bit instructions now have 16-bit forms. 

On C6000 parts, the CPU gets 32-byte chunks from memory-this 32-byte
chunk is called a fetch packet and is also aligned to a 32-byte
boundary. 

Traditionally (on 6200/6400/6700), 8 32 bit instructions comprise a
fetch packet. 

Now on 64x+, we can optionally substitute two 16-bit instructions for
any of the first 7 32-bit instructions in a fetch packet.

 When we use 16-bit instructions, we have to have some way to tell the
HW that this fetch packet contains 16-bit instructions.

So we do that through what's called a fetch packet header.

 The fetch packet header is always the last word (last 4 bytes) in the
fetch packet that has 16-bit instructions.

 4 special bits at front of last word that tells HW this FP is special

This "fetch packet header" has some special bits that tell the HW

            - that this fetch packet is special-it contains 16 bit
instructions

            - which tells the HW which instructions are 16-bit
instructions and 32-bit

            - also communicates how the HW is to interpret the 16-bit
instructions.

More than one pair of 16-bit instructions leads to code size savings.

 We somehow have to be able to tell HW what instructions are 16-bit
instructions.  Best way to practically do this is to use a fetch packet
header (in the 8th word of the fetch packet) that tells the HW this FP
is special.  A fetch packet is 32 bytes long and is the unit size the
C6000 uses when talking to program memory.

 


________________________________

From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On
Behalf Of YunChuan Qin
Sent: Monday, March 26, 2007 7:01 PM
To: [email protected]
Subject: float support on C64+


I compiled some C source code on DSP which used a float variable .
And it generated an instruction:
.fphead       p, l, W, BU, nobr, nosat, 1110100
this instruction failed on dsp but can run on C64plus cycle accurate
simulator in ccs. 
I cannot find any description about the fphead and don't know how to
deal with it.
Can anybody help me?

-- 
blog site:blog.csdn.net/freasy 
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to