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__
parent
92bae0b1df
commit
0cc7e5b0b7
|
@ -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 */
|
||||||
|
|
Loading…
Reference in New Issue