Philips Semiconductors
DSPCPU Operations for TM1100
File: ops.fm5, modified 7/23/99
PRELIMINARY INFORMATION
A-105
Signed 16-bit load with index
SYNTAX
[ IF r
guard ] ild16r rsrc1 rsrc2
→ rdest
FUNCTION
if r
guard then {
if PCSW.bytesex = LITTLE_ENDIAN then
bs
← 1
else
bs
← 0
temp<7:0>
← mem[(rsrc1 + rsrc2 +(1 ⊕ bs)]
temp<15:8>
← mem[(rsrc1 + rsrc2 + (0 ⊕ bs)]
r
dest
← sign_ext16to32(temp<15:0>)
}
ATTRIBUTES
Function unit
dmem
Operation code
195
Number of operands
2
Modier
No
Modier range
—
Latency
3
Issue slots
4, 5
DESCRIPTION
The ild16r operation loads the 16-bit memory value from the address computed by r
src1 + rsrc2, sign extends it
to 32 bits, and stores the result in r
dest. If the memory address computed by rsrc1 + rsrc2 is not a multiple of 2, the
result of ild16r is undened but no exception will be raised. This load operation is performed as little-endian or big-
endian depending on the current setting of the bytesex bit in the PCSW.
The result of an access by ild16r to the MMIO address aperture is undened; access to the MMIO aperture is
dened only for 32-bit loads and stores.
The ild16r operation optionally takes a guard, specied in r
guard. If a guard is present, its LSB controls the
modication of the destination register and the occurrence of side effects. If the LSB of r
guard is 1, rdest is written and
the data cache status bits are updated if the addressed locations are cacheable. if the LSB of r
guard is 0, rdest is not
changed and ild16r has no side effects whatever.
EXAMPLES
Initial Values
Operation
Result
r10 = 0xd00, r20 = 2, [0xd02] = 0x22,
[0xd03] = 0x11
ild16r r10 r20
→ r80
r80
← 0x00002211
r50 = 0, r40 = 0xd04, r30 = 0xfffffffc,
[0xd00] = 0x84, [0xd01] = 0x33
IF r50 ild16r r40 r30
→ r90
no change, since guard is false
r60 = 1, r40 = 0xd04, r30 = 0xfffffffc,
[0xd00] = 0x84, [0xd01] = 0x33
IF r60 ild16r r40 r30
→ r100 r100 ← 0xffff8433
r70 = 0xd01, r30 = 0xfffffffc
ild16r r70 r30
→ r110
r110 undened, since 0xd01 +(–4) is not a
multiple of 2
SEE ALSO
ild16r