本文整理汇总了C++中GET_HSR0函数的典型用法代码示例。如果您正苦于以下问题:C++ GET_HSR0函数的具体用法?C++ GET_HSR0怎么用?C++ GET_HSR0使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GET_HSR0函数的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: frv_cache_write
/* Writes data through the given cache.
The data is assumed to be in target endian order.
Returns the number of cycles required to write the data. */
int
frv_cache_write (FRV_CACHE *cache, SI address, char *data, unsigned length)
{
int copy_back;
/* See if this data is already in the cache. */
SIM_CPU *current_cpu = cache->cpu;
USI hsr0 = GET_HSR0 ();
FRV_CACHE_TAG *tag;
int found;
if (non_cache_access (cache, address))
{
write_data_to_memory (cache, address, data, length);
return 1;
}
found = get_tag (cache, address, &tag);
/* Write the data to the cache line if one was available and if it is
either a hit or a miss in copy-back mode.
The tag may be NULL if all ways were in use and locked on a miss.
*/
copy_back = GET_HSR0_CBM (GET_HSR0 ());
if (tag != NULL && (found || copy_back))
{
int line_offset;
/* Load the line from memory first, if it was a miss. */
if (! found)
fill_line_from_memory (cache, tag, address);
line_offset = address & (cache->line_size - 1);
memcpy (tag->line + line_offset, data, length);
tag->dirty = 1;
/* Update the LRU information for the tags in this set. */
set_most_recently_used (cache, tag);
}
/* Write the data to memory if there was no line available or we are in
write-through (not copy-back mode). */
if (tag == NULL || ! copy_back)
{
write_data_to_memory (cache, address, data, length);
if (tag != NULL)
tag->dirty = 0;
}
return 1; /* TODO - number of cycles unknown */
}
开发者ID:mattstock,项目名称:binutils-bexkat1,代码行数:52,代码来源:cache.c
示例2: frvbf_read_mem_UQI
UQI
frvbf_read_mem_UQI (SIM_CPU *current_cpu, IADDR pc, SI address)
{
USI hsr0 = GET_HSR0 ();
FRV_CACHE *cache = CPU_DATA_CACHE (current_cpu);
/* Check for access exceptions. */
address = check_data_read_address (current_cpu, address, 0);
address = check_readwrite_address (current_cpu, address, 0);
/* If we need to count cycles, then the cache operation will be
initiated from the model profiling functions.
See frvbf_model_.... */
if (model_insn)
{
CPU_LOAD_ADDRESS (current_cpu) = address;
CPU_LOAD_LENGTH (current_cpu) = 1;
CPU_LOAD_SIGNED (current_cpu) = 0;
return 0xb7; /* any random value */
}
if (GET_HSR0_DCE (hsr0))
{
int cycles;
cycles = frv_cache_read (cache, 0, address);
if (cycles != 0)
return CACHE_RETURN_DATA (cache, 0, address, UQI, 1);
}
return GETMEMUQI (current_cpu, pc, address);
}
开发者ID:OpenInkpot-archive,项目名称:iplinux-gdb,代码行数:31,代码来源:memory.c
示例3: fr500_check_insn_read_address
static PCADDR
fr500_check_insn_read_address (SIM_CPU *current_cpu, PCADDR address,
int align_mask)
{
if (address & align_mask)
{
frv_queue_mem_address_not_aligned_interrupt (current_cpu, address);
address &= ~align_mask;
}
if ((USI)address >= 0xfeff0600 && (USI)address <= 0xfeff7fff
|| (USI)address >= 0xfe800000 && (USI)address <= 0xfefeffff)
frv_queue_instruction_access_error_interrupt (current_cpu);
else if ((USI)address >= 0xfe004000 && (USI)address <= 0xfe3fffff
|| (USI)address >= 0xfe400000 && (USI)address <= 0xfe403fff
|| (USI)address >= 0xfe404000 && (USI)address <= 0xfe7fffff)
frv_queue_instruction_access_exception_interrupt (current_cpu);
else
{
USI hsr0 = GET_HSR0 ();
if (! GET_HSR0_RME (hsr0)
&& (USI)address >= 0xfe000000 && (USI)address <= 0xfe003fff)
frv_queue_instruction_access_exception_interrupt (current_cpu);
}
return address;
}
开发者ID:OpenInkpot-archive,项目名称:iplinux-gdb,代码行数:27,代码来源:memory.c
示例4: fill_line_from_memory
/* Fill the given cache line from memory. */
static void
fill_line_from_memory (FRV_CACHE *cache, FRV_CACHE_TAG *tag, SI address)
{
PCADDR pc;
int line_alignment;
SI read_address;
SIM_CPU *current_cpu = cache->cpu;
/* If this line is already valid and the cache is in copy-back mode, then
write this line to memory before refilling it.
Check the dirty bit first, since it is less likely to be set. */
if (tag->dirty && tag->valid)
{
int hsr0 = GET_HSR0 ();
if (GET_HSR0_CBM (hsr0))
write_line_to_memory (cache, tag);
}
else if (tag->line == NULL)
{
int line_index = tag - cache->tag_storage;
tag->line = cache->data_storage + (line_index * cache->line_size);
}
pc = CPU_PC_GET (current_cpu);
line_alignment = cache->line_size - 1;
read_address = address & ~line_alignment;
read_data_from_memory (current_cpu, read_address, tag->line,
cache->line_size);
tag->tag = CACHE_ADDRESS_TAG (cache, address);
tag->valid = 1;
}
开发者ID:mattstock,项目名称:binutils-bexkat1,代码行数:32,代码来源:cache.c
示例5: frvbf_write_mem_DF
void
frvbf_write_mem_DF (SIM_CPU *current_cpu, IADDR pc, SI address, DF value)
{
USI hsr0;
hsr0 = GET_HSR0 ();
if (GET_HSR0_DCE (hsr0))
sim_queue_fn_mem_df_write (current_cpu, frvbf_mem_set_DF, address, value);
else
sim_queue_mem_df_write (current_cpu, address, value);
frv_set_write_queue_slot (current_cpu);
}
开发者ID:OpenInkpot-archive,项目名称:iplinux-gdb,代码行数:11,代码来源:memory.c
示例6: frv_cache_enabled
/* Determine whether the given cache is enabled. */
int
frv_cache_enabled (FRV_CACHE *cache)
{
SIM_CPU *current_cpu = cache->cpu;
int hsr0 = GET_HSR0 ();
if (GET_HSR0_ICE (hsr0) && cache == CPU_INSN_CACHE (current_cpu))
return 1;
if (GET_HSR0_DCE (hsr0) && cache == CPU_DATA_CACHE (current_cpu))
return 1;
return 0;
}
开发者ID:mattstock,项目名称:binutils-bexkat1,代码行数:12,代码来源:cache.c
示例7: non_cache_access
/* Determine whether the given address should be accessed without using
the cache. */
static int
non_cache_access (FRV_CACHE *cache, USI address)
{
int hsr0;
SIM_DESC sd;
SIM_CPU *current_cpu = cache->cpu;
sd = CPU_STATE (current_cpu);
switch (STATE_ARCHITECTURE (sd)->mach)
{
case bfd_mach_fr400:
case bfd_mach_fr450:
if (address >= 0xff000000
|| address >= 0xfe000000 && address <= 0xfeffffff)
return 1; /* non-cache access */
break;
case bfd_mach_fr550:
if (address >= 0xff000000
|| address >= 0xfeff0000 && address <= 0xfeffffff)
return 1; /* non-cache access */
if (cache == CPU_INSN_CACHE (current_cpu))
{
if (address >= 0xfe000000 && address <= 0xfe007fff)
return 1; /* non-cache access */
}
else if (address >= 0xfe400000 && address <= 0xfe407fff)
return 1; /* non-cache access */
break;
default:
if (address >= 0xff000000
|| address >= 0xfeff0000 && address <= 0xfeffffff)
return 1; /* non-cache access */
if (cache == CPU_INSN_CACHE (current_cpu))
{
if (address >= 0xfe000000 && address <= 0xfe003fff)
return 1; /* non-cache access */
}
else if (address >= 0xfe400000 && address <= 0xfe403fff)
return 1; /* non-cache access */
break;
}
hsr0 = GET_HSR0 ();
if (GET_HSR0_RME (hsr0))
return ram_access (cache, address);
return 0; /* cache-access */
}
开发者ID:mattstock,项目名称:binutils-bexkat1,代码行数:50,代码来源:cache.c
示例8: fr550_check_readwrite_address
static SI
fr550_check_readwrite_address (SIM_CPU *current_cpu, SI address, int align_mask)
{
/* No alignment restrictions on fr550 */
if ((USI)address >= 0xfe000000 && (USI)address <= 0xfe3fffff
|| (USI)address >= 0xfe408000 && (USI)address <= 0xfe7fffff)
frv_queue_data_access_exception_interrupt (current_cpu);
else
{
USI hsr0 = GET_HSR0 ();
if (! GET_HSR0_RME (hsr0)
&& (USI)address >= 0xfe400000 && (USI)address <= 0xfe407fff)
frv_queue_data_access_exception_interrupt (current_cpu);
}
return address;
}
开发者ID:OpenInkpot-archive,项目名称:iplinux-gdb,代码行数:18,代码来源:memory.c
示例9: fr550_check_insn_read_address
static PCADDR
fr550_check_insn_read_address (SIM_CPU *current_cpu, PCADDR address,
int align_mask)
{
address &= ~align_mask;
if ((USI)address >= 0xfe800000 && (USI)address <= 0xfeffffff)
frv_queue_instruction_access_error_interrupt (current_cpu);
else if ((USI)address >= 0xfe008000 && (USI)address <= 0xfe7fffff)
frv_queue_instruction_access_exception_interrupt (current_cpu);
else
{
USI hsr0 = GET_HSR0 ();
if (! GET_HSR0_RME (hsr0)
&& (USI)address >= 0xfe000000 && (USI)address <= 0xfe007fff)
frv_queue_instruction_access_exception_interrupt (current_cpu);
}
return address;
}
开发者ID:OpenInkpot-archive,项目名称:iplinux-gdb,代码行数:20,代码来源:memory.c
示例10: frvbf_read_imem_USI
USI
frvbf_read_imem_USI (SIM_CPU *current_cpu, PCADDR vpc)
{
USI hsr0;
vpc = check_insn_read_address (current_cpu, vpc, 3);
hsr0 = GET_HSR0 ();
if (GET_HSR0_ICE (hsr0))
{
FRV_CACHE *cache;
USI value;
/* We don't want this to show up in the cache statistics. That read
is done in frvbf_simulate_insn_prefetch. So read the cache or memory
passively here. */
cache = CPU_INSN_CACHE (current_cpu);
if (frv_cache_read_passive_SI (cache, vpc, &value))
return value;
}
return sim_core_read_unaligned_4 (current_cpu, vpc, read_map, vpc);
}
开发者ID:OpenInkpot-archive,项目名称:iplinux-gdb,代码行数:21,代码来源:memory.c
示例11: frvbf_read_mem_UHI
UHI
frvbf_read_mem_UHI (SIM_CPU *current_cpu, IADDR pc, SI address)
{
USI hsr0;
FRV_CACHE *cache;
/* Check for access exceptions. */
address = check_data_read_address (current_cpu, address, 1);
address = check_readwrite_address (current_cpu, address, 1);
/* If we need to count cycles, then the cache operation will be
initiated from the model profiling functions.
See frvbf_model_.... */
hsr0 = GET_HSR0 ();
cache = CPU_DATA_CACHE (current_cpu);
if (model_insn)
{
CPU_LOAD_ADDRESS (current_cpu) = address;
CPU_LOAD_LENGTH (current_cpu) = 2;
CPU_LOAD_SIGNED (current_cpu) = 0;
return 0xb711; /* any random value */
}
if (GET_HSR0_DCE (hsr0))
{
int cycles;
/* Handle access which crosses cache line boundary */
SIM_DESC sd = CPU_STATE (current_cpu);
if (STATE_ARCHITECTURE (sd)->mach == bfd_mach_fr550)
{
if (DATA_CROSSES_CACHE_LINE (cache, address, 2))
return read_mem_unaligned_HI (current_cpu, pc, address);
}
cycles = frv_cache_read (cache, 0, address);
if (cycles != 0)
return CACHE_RETURN_DATA (cache, 0, address, UHI, 2);
}
return GETMEMUHI (current_cpu, pc, address);
}
开发者ID:OpenInkpot-archive,项目名称:iplinux-gdb,代码行数:40,代码来源:memory.c
示例12: check_reset
/* Check to see the if the RSTR.HR or RSTR.SR bits have been set. If so, handle
the appropriate reset interrupt. */
static int
check_reset (SIM_CPU *current_cpu, IADDR pc)
{
int hsr0;
int hr;
int sr;
SI rstr;
FRV_CACHE *cache = CPU_DATA_CACHE (current_cpu);
IADDR address = RSTR_ADDRESS;
/* We don't want this to show up in the cache statistics, so read the
cache passively. */
if (! frv_cache_read_passive_SI (cache, address, & rstr))
rstr = sim_core_read_unaligned_4 (current_cpu, pc, read_map, address);
hr = GET_RSTR_HR (rstr);
sr = GET_RSTR_SR (rstr);
if (! hr && ! sr)
return 0; /* no reset. */
/* Reinitialize the machine state. */
if (hr)
frv_hardware_reset (current_cpu);
else
frv_software_reset (current_cpu);
/* Branch to the reset address. */
hsr0 = GET_HSR0 ();
if (GET_HSR0_SA (hsr0))
SET_H_PC (0xff000000);
else
SET_H_PC (0);
return 1; /* reset */
}
开发者ID:benjaminlevine,项目名称:Huawei-HG633-Open-Source-Software-Package,代码行数:38,代码来源:interrupts.c
示例13: handle_req_store
static void
handle_req_store (FRV_CACHE *cache, int pipe, FRV_CACHE_REQUEST *req)
{
SIM_CPU *current_cpu;
FRV_CACHE_TAG *tag;
int found;
int copy_back;
SI address = req->address;
char *data = req->u.store.data;
int length = req->u.store.length;
/* If this address interferes with an existing request, then requeue it. */
if (address_interference (cache, address, req, pipe))
{
pipeline_requeue_request (& cache->pipeline[pipe]);
return;
}
/* Non-cache access. Write the data directly to memory. */
if (! frv_cache_enabled (cache) || non_cache_access (cache, address))
{
write_data_to_memory (cache, address, data, length);
return;
}
/* See if the data is in the cache. */
found = get_tag (cache, address, &tag);
/* Write the data to the cache line if one was available and if it is
either a hit or a miss in copy-back mode.
The tag may be NULL if all ways were in use and locked on a miss.
*/
current_cpu = cache->cpu;
copy_back = GET_HSR0_CBM (GET_HSR0 ());
if (tag != NULL && (found || copy_back))
{
int line_offset;
/* Load the line from memory first, if it was a miss. */
if (! found)
{
/* We need to wait for the memory unit to fetch the data.
Store this request in the WAR and requeue the store request. */
wait_in_WAR (cache, pipe, req);
pipeline_requeue_request (& cache->pipeline[pipe]);
/* Decrement the counts of accesses and hits because when the requeued
request is processed again, it will appear to be a new access and
a hit. */
--cache->statistics.accesses;
--cache->statistics.hits;
return;
}
line_offset = address & (cache->line_size - 1);
memcpy (tag->line + line_offset, data, length);
invalidate_return_buffer (cache, address);
tag->dirty = 1;
/* Update the LRU information for the tags in this set. */
set_most_recently_used (cache, tag);
}
/* Write the data to memory if there was no line available or we are in
write-through (not copy-back mode). */
if (tag == NULL || ! copy_back)
{
write_data_to_memory (cache, address, data, length);
if (tag != NULL)
tag->dirty = 0;
}
}
开发者ID:mattstock,项目名称:binutils-bexkat1,代码行数:69,代码来源:cache.c
示例14: frv_initialize
/* Initialize the frv simulator. */
void
frv_initialize (SIM_CPU *current_cpu, SIM_DESC sd)
{
FRV_PROFILE_STATE *ps = CPU_PROFILE_STATE (current_cpu);
PROFILE_DATA *p = CPU_PROFILE_DATA (current_cpu);
FRV_CACHE *insn_cache = CPU_INSN_CACHE (current_cpu);
FRV_CACHE *data_cache = CPU_DATA_CACHE (current_cpu);
int insn_cache_enabled = CACHE_INITIALIZED (insn_cache);
int data_cache_enabled = CACHE_INITIALIZED (data_cache);
USI hsr0;
/* Initialize the register control information first since some of the
register values are used in further configuration. */
frv_register_control_init (current_cpu);
/* We need to ensure that the caches are initialized even if they are not
initially enabled (via commandline) because they can be enabled by
software. */
if (! insn_cache_enabled)
frv_cache_init (current_cpu, CPU_INSN_CACHE (current_cpu));
if (! data_cache_enabled)
frv_cache_init (current_cpu, CPU_DATA_CACHE (current_cpu));
/* Set the default cpu frequency if it has not been set on the command
line. */
if (PROFILE_CPU_FREQ (p) == 0)
PROFILE_CPU_FREQ (p) = 266000000; /* 266MHz */
/* Allocate one cache line of memory containing the address of the reset
register Use the largest of the insn cache line size and the data cache
line size. */
{
int addr = RSTR_ADDRESS;
void *aligned_buffer;
int bytes;
if (CPU_INSN_CACHE (current_cpu)->line_size
> CPU_DATA_CACHE (current_cpu)->line_size)
bytes = CPU_INSN_CACHE (current_cpu)->line_size;
else
bytes = CPU_DATA_CACHE (current_cpu)->line_size;
/* 'bytes' is a power of 2. Calculate the starting address of the
cache line. */
addr &= ~(bytes - 1);
aligned_buffer = zalloc (bytes); /* clear */
sim_core_attach (sd, NULL, 0, access_read_write, 0, addr, bytes,
0, NULL, aligned_buffer);
}
PROFILE_INFO_CPU_CALLBACK(p) = frv_profile_info;
ps->insn_fetch_address = -1;
ps->branch_address = -1;
cgen_init_accurate_fpu (current_cpu, CGEN_CPU_FPU (current_cpu),
frvbf_fpu_error);
/* Now perform power-on reset. */
frv_power_on_reset (current_cpu);
/* Make sure that HSR0.ICE and HSR0.DCE are set properly. */
hsr0 = GET_HSR0 ();
if (insn_cache_enabled)
SET_HSR0_ICE (hsr0);
else
CLEAR_HSR0_ICE (hsr0);
if (data_cache_enabled)
SET_HSR0_DCE (hsr0);
else
CLEAR_HSR0_DCE (hsr0);
SET_HSR0 (hsr0);
}
开发者ID:Drakey83,项目名称:steamlink-sdk,代码行数:73,代码来源:reset.c
注:本文中的GET_HSR0函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论