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
__archive__
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; arm11->reg_list[ARM11_RC_R1].dirty = 1;
u16 * buf16 = (u16*)buffer; for (size_t i = 0; i < count; i++)
{size_t i;
for (i = 0; i < count; i++)
{ {
/* ldrh r1, [r0], #2 */ /* ldrh r1, [r0], #2 */
arm11_run_instr_no_data1(arm11, 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 */ /* MCR p14,0,R1,c0,c5,0 */
arm11_run_instr_data_from_core(arm11, 0xEE001E15, &res, 1); arm11_run_instr_data_from_core(arm11, 0xEE001E15, &res, 1);
*buf16++ = res; u16 svalue = res;
}} memcpy(buffer + count * sizeof(u16), &svalue, sizeof(u16));
}
break; break;
} }
case 4: 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],#4 */
/* LDC p14,c5,[R0] */ /* LDC p14,c5,[R0] */
arm11_run_instr_data_from_core(arm11, arm11_run_instr_data_from_core(arm11, instr, words, count);
(!arm11_config_memrw_no_increment ? 0xecb05e01 : 0xed905e00),
(u32 *)buffer, count);
break; break;
}
} }
arm11_run_instr_data_finish(arm11); 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; arm11->reg_list[ARM11_RC_R1].dirty = 1;
u16 * buf16 = (u16*)buffer; for (size_t i = 0; i < count; i++)
{size_t i;
for (i = 0; i < count; i++)
{ {
u16 value;
memcpy(&value, buffer + count * sizeof(u16), sizeof(u16));
/* MRC p14,0,r1,c0,c5,0 */ /* 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], #2 */
/* strh r1, [r0] */ /* strh r1, [r0] */
arm11_run_instr_no_data1(arm11, arm11_run_instr_no_data1(arm11,
!arm11_config_memrw_no_increment ? 0xe0c010b2 : 0xe1c010b0); !arm11_config_memrw_no_increment ? 0xe0c010b2 : 0xe1c010b0);
}} }
break; break;
} }
case 4: case 4: {
/** \todo TODO: check if buffer cast to u32* might cause alignment problems */ 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) if (!arm11_config_memwrite_burst)
{ {
/* STC p14,c5,[R0],#4 */ /* STC p14,c5,[R0],#4 */
/* STC p14,c5,[R0]*/ /* STC p14,c5,[R0]*/
arm11_run_instr_data_to_core(arm11, arm11_run_instr_data_to_core(arm11, instr, words, count);
(!arm11_config_memrw_no_increment ? 0xeca05e01 : 0xed805e00),
(u32 *)buffer, count);
} }
else else
{ {
/* STC p14,c5,[R0],#4 */ /* STC p14,c5,[R0],#4 */
/* STC p14,c5,[R0]*/ /* STC p14,c5,[R0]*/
arm11_run_instr_data_to_core_noack(arm11, arm11_run_instr_data_to_core_noack(arm11, instr, words, count);
(!arm11_config_memrw_no_increment ? 0xeca05e01 : 0xed805e00),
(u32 *)buffer, count);
} }
break; break;
} }
}
#if 1 #if 1
/* r0 verification */ /* r0 verification */