2022-09-23 19:38:24 +02:00
|
|
|
/*
|
Hexagon (target/hexagon) Reduce manipulation of slot_cancelled
We only need to track slot for predicated stores and predicated HVX
instructions.
Add arguments to the probe helper functions to indicate if the slot
is predicated.
Here is a simple example of the differences in the TCG code generated:
IN:
0x00400094: 0xf900c102 { if (P0) R2 = and(R0,R1) }
BEFORE
---- 00400094
mov_i32 slot_cancelled,$0x0
mov_i32 new_r2,r2
and_i32 tmp0,p0,$0x1
brcond_i32 tmp0,$0x0,eq,$L1
and_i32 tmp0,r0,r1
mov_i32 new_r2,tmp0
br $L2
set_label $L1
or_i32 slot_cancelled,slot_cancelled,$0x8
set_label $L2
mov_i32 r2,new_r2
AFTER
---- 00400094
mov_i32 new_r2,r2
and_i32 tmp0,p0,$0x1
brcond_i32 tmp0,$0x0,eq,$L1
and_i32 tmp0,r0,r1
mov_i32 new_r2,tmp0
br $L2
set_label $L1
set_label $L2
mov_i32 r2,new_r2
Signed-off-by: Taylor Simpson <tsimpson@quicinc.com>
Reviewed-by: Anton Johansson <anjo@rev.ng>
Message-Id: <20230307025828.1612809-14-tsimpson@quicinc.com>
2023-03-07 03:58:27 +01:00
|
|
|
* Copyright(c) 2019-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
|
2022-09-23 19:38:24 +02:00
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef HEXAGON_OP_HELPER_H
|
|
|
|
#define HEXAGON_OP_HELPER_H
|
|
|
|
|
|
|
|
/* Misc functions */
|
|
|
|
void write_new_pc(CPUHexagonState *env, bool pkt_has_multi_cof, target_ulong addr);
|
|
|
|
|
|
|
|
uint8_t mem_load1(CPUHexagonState *env, uint32_t slot, target_ulong vaddr);
|
|
|
|
uint16_t mem_load2(CPUHexagonState *env, uint32_t slot, target_ulong vaddr);
|
|
|
|
uint32_t mem_load4(CPUHexagonState *env, uint32_t slot, target_ulong vaddr);
|
|
|
|
uint64_t mem_load8(CPUHexagonState *env, uint32_t slot, target_ulong vaddr);
|
|
|
|
|
|
|
|
void log_reg_write(CPUHexagonState *env, int rnum,
|
|
|
|
target_ulong val, uint32_t slot);
|
|
|
|
void log_store64(CPUHexagonState *env, target_ulong addr,
|
|
|
|
int64_t val, int width, int slot);
|
|
|
|
void log_store32(CPUHexagonState *env, target_ulong addr,
|
|
|
|
target_ulong val, int width, int slot);
|
|
|
|
|
|
|
|
#endif
|