Fix most pointer cast alignment warnings in arm11.c; fix u16 memory reads..

git-svn-id: svn://svn.berlios.de/openocd/trunk@1628 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
zwelch 2009-05-07 01:26:56 +00:00
parent 92bae0b1df
commit 0cc7e5b0b7
1 changed files with 24 additions and 23 deletions

View File

@ -1144,10 +1144,7 @@ int arm11_read_memory(struct target_s *target, u32 address, u32 size, u32 count,
{
arm11->reg_list[ARM11_RC_R1].dirty = 1;
u16 * buf16 = (u16*)buffer;
{size_t i;
for (i = 0; i < count; i++)
for (size_t i = 0; i < count; i++)
{
/* ldrh r1, [r0], #2 */
arm11_run_instr_no_data1(arm11,
@ -1158,20 +1155,24 @@ int arm11_read_memory(struct target_s *target, u32 address, u32 size, u32 count,
/* MCR p14,0,R1,c0,c5,0 */
arm11_run_instr_data_from_core(arm11, 0xEE001E15, &res, 1);
*buf16++ = res;
}}
u16 svalue = res;
memcpy(buffer + count * sizeof(u16), &svalue, sizeof(u16));
}
break;
}
case 4:
{
u32 instr = !arm11_config_memrw_no_increment ? 0xecb05e01 : 0xed905e00;
/** \todo TODO: buffer cast to u32* causes alignment warnings */
u32 *words = (u32 *)buffer;
/* LDC p14,c5,[R0],#4 */
/* LDC p14,c5,[R0] */
arm11_run_instr_data_from_core(arm11,
(!arm11_config_memrw_no_increment ? 0xecb05e01 : 0xed905e00),
(u32 *)buffer, count);
arm11_run_instr_data_from_core(arm11, instr, words, count);
break;
}
}
arm11_run_instr_data_finish(arm11);
@ -1223,45 +1224,45 @@ int arm11_write_memory(struct target_s *target, u32 address, u32 size, u32 count
{
arm11->reg_list[ARM11_RC_R1].dirty = 1;
u16 * buf16 = (u16*)buffer;
{size_t i;
for (i = 0; i < count; i++)
for (size_t i = 0; i < count; i++)
{
u16 value;
memcpy(&value, buffer + count * sizeof(u16), sizeof(u16));
/* MRC p14,0,r1,c0,c5,0 */
arm11_run_instr_data_to_core1(arm11, 0xee101e15, *buf16++);
arm11_run_instr_data_to_core1(arm11, 0xee101e15, value);
/* strh r1, [r0], #2 */
/* strh r1, [r0] */
arm11_run_instr_no_data1(arm11,
!arm11_config_memrw_no_increment ? 0xe0c010b2 : 0xe1c010b0);
}}
}
break;
}
case 4:
/** \todo TODO: check if buffer cast to u32* might cause alignment problems */
case 4: {
u32 instr = !arm11_config_memrw_no_increment ? 0xeca05e01 : 0xed805e00;
/** \todo TODO: buffer cast to u32* causes alignment warnings */
u32 *words = (u32*)buffer;
if (!arm11_config_memwrite_burst)
{
/* STC p14,c5,[R0],#4 */
/* STC p14,c5,[R0]*/
arm11_run_instr_data_to_core(arm11,
(!arm11_config_memrw_no_increment ? 0xeca05e01 : 0xed805e00),
(u32 *)buffer, count);
arm11_run_instr_data_to_core(arm11, instr, words, count);
}
else
{
/* STC p14,c5,[R0],#4 */
/* STC p14,c5,[R0]*/
arm11_run_instr_data_to_core_noack(arm11,
(!arm11_config_memrw_no_increment ? 0xeca05e01 : 0xed805e00),
(u32 *)buffer, count);
arm11_run_instr_data_to_core_noack(arm11, instr, words, count);
}
break;
}
}
#if 1
/* r0 verification */