Instruction Execution Timing
10-8
M68060 USER’S MANUAL
MOTOROLA
Additionally, the use of instruction folding techniques allow one or two instructions to be
simultaneously executed with a predicted taken Bcc (also for BRA and JMP instructions).
The floating-point pre-exception model of the MC68060 supports execution overlap
between multi-cycle floating-point instructions and the integer execute engines. Once a
multi-cycle floating-point instruction has started its execution, the primary and secondary
OEPs may continue to dispatch and complete integer instructions in parallel with the
floating-point instructions. The OEPs will stall only if another floating-point instruction is
encountered before the first floating-point instruction has completed its execution. The
floating-point instructions that permit this execution overlap are classified as pOEP-but-
allows-sOEP in Table 10-4.
10.1.3 Dispatch Test 3: Allowable Effective Addressing Mode in the sOEP
To minimize the hardware structures required for the address generation unit within the sec-
ondary OEP, certain addressing modes are not allowed. The addressing modes not sup-
ported by the sOEP include: the address register indirect with index plus base displacement
{(bd, An, Xi
SF)} and all PC-relative modes {(d16, PC), (d8, PC, Xi
SF), (bd, PC, Xi
SF)}.
10.1.4 Dispatch Test 4: Allowable Operand Data Memory Reference
The MC68060 processor design features a shared operand data cache pipeline capable of
supporting a single operand reference per machine cycle. This test validates that only a sin-
gle operand data memory reference is present between the instruction-pair in the pOEP and
sOEP.
10.1.5 Dispatch Test 5: No Register Conflicts on sOEP.AGU Resources
This test validates that the register resources of the sOEP.AGU (Base, Index) do not conflict
with the results being generated by the instruction in the pOEP. The most significant bit of
the resource name is asserted to indicate a register resource. Thus, this test can be stated
as:
test5 = 1
if (sOEP.Base > 15)/* indicates a valid register
/* if the sOEP.Base equals the pOEP’s Address_ or Execute_result, a conflict exists
if ((sOEP.Base = pOEP.Address_result) || (sOEP.Base = pOEP.Execute_result))
test5 = 0/* test5 has register conflict; test fails
/* set test5 as okay
if (sOEP.Index > 15)/* indicates a valid register
/* if the sOEP.Index equals the pOEP’s Address_ or Execute_result, a conflict exists
if ((sOEP.Index = pOEP.Address_result) || (sOEP.Index = pOEP.Execute_result))
test5 = 0/* test5 has register conflict; test fails
As examples of failing sequences, consider the following instruction pairs:
add.l #<data>,a0Execute_result = a0
mov.l (a0),d0Base = a0
add.l d1,d0 Execute_result = d0
lea
(a1,d0.l),a0Index = d0