update : std_ulogic;
xerc : xer_common_t;
reserve : std_ulogic;
- atomic : std_ulogic;
- atomic_last : std_ulogic;
rc : std_ulogic;
nc : std_ulogic; -- non-cacheable access
virt_mode : std_ulogic;
elt_length => x"0", byte_reverse => '0', brev_mask => "000",
sign_extend => '0', update => '0',
xerc => xerc_init, reserve => '0',
- atomic => '0', atomic_last => '0', rc => '0', nc => '0',
+ rc => '0', nc => '0',
virt_mode => '0', priv_mode => '0', load_sp => '0',
sprsel => "00", ric => "00", is_slbia => '0', align_intr => '0',
dword_index => '0', two_dwords => '0', incomplete => '0');
addr := lsu_sum;
if l_in.second = '1' then
- if l_in.update = '0' then
- -- for the second half of a 16-byte transfer,
- -- use the previous address plus 8.
- addr := std_ulogic_vector(unsigned(r1.addr0(63 downto 3)) + 1) & r1.addr0(2 downto 0);
- else
- -- for an update-form load, use the previous address
- -- as the value to write back to RA.
- addr := r1.addr0;
- end if;
+ -- for an update-form load, use the previous address
+ -- as the value to write back to RA.
+ addr := r1.addr0;
end if;
if l_in.mode_32bit = '1' then
addr(63 downto 32) := (others => '0');
misaligned := or (addr_mask and addr(2 downto 0));
v.align_intr := l_in.reserve and misaligned;
- v.atomic := not misaligned;
- v.atomic_last := not misaligned and (l_in.second or not l_in.repeat);
-
case l_in.op is
when OP_STORE =>
v.store := '1';
when OP_LOAD =>
- if l_in.update = '0' or l_in.second = '0' then
+ -- Note: only RA updates have l_in.second = 1
+ if l_in.second = '0' then
v.load := '1';
if HAS_FPU and l_in.is_32bit = '1' then
-- Allow an extra cycle for SP->DP precision conversion
d_out.dcbz <= stage1_req.dcbz;
d_out.nc <= stage1_req.nc;
d_out.reserve <= stage1_req.reserve;
- d_out.atomic <= stage1_req.atomic;
- d_out.atomic_last <= stage1_req.atomic_last;
d_out.addr <= stage1_req.addr;
d_out.byte_sel <= stage1_req.byte_sel;
d_out.virt_mode <= stage1_req.virt_mode;
d_out.dcbz <= r2.req.dcbz;
d_out.nc <= r2.req.nc;
d_out.reserve <= r2.req.reserve;
- d_out.atomic <= r2.req.atomic;
- d_out.atomic_last <= r2.req.atomic_last;
d_out.addr <= r2.req.addr;
d_out.byte_sel <= r2.req.byte_sel;
d_out.virt_mode <= r2.req.virt_mode;