Posted Tue Jul 26, 2011 1:24 PM
Posted Tue Jul 26, 2011 11:00 PM
(define_insn "mulhisi3"
[(set (match_operand:SI 0 "register_operand" "=r,r")
(mult:SI (match_operand:HI 1 "register_operand" "r,r")
(match_operand:HI 2 "general_operand" "rR>,Q")))]
""
{
/* When both input operands are registers, we may need to swap them. */
if(REG_P(operands[1]) && REG_P(operands[2]))
{
/* Check for forms like: r0 = r1 * r0 */
if(REGNO(operands[0]) == REGNO(operands[2]))
{
/* Swap operands, otherwise we will emit code like:
mov r1, r0
mpy r0, r0
instead of:
mpy r1, r0
*/
rtx temp = operands[1];
operands[1] = operands[2];
operands[2] = temp;
}
}
if(REGNO(operands[0]) != REGNO(operands[1]))
{
output_asm_insn("mov %1, %0", operands);
}
output_asm_insn("mpy %2, %0", operands);
return("");
}
[(set_attr "length" "2,3")])
Quote
Quote
Posted Wed Jul 27, 2011 6:42 AM
Posted Mon Aug 8, 2011 12:51 AM
Posted Sat Aug 20, 2011 5:43 AM
void vdp_copy_from_sys(int index, char* src, int size) {
char* end = src + size;
VDP_ADDRESS_REG = index;
VDP_ADDRESS_REG = (char)(index >> 8) | VDP_WRITE_FLAG;
while(src < end) VDP_WRITE_DATA_REG = *src++;
}
void main() {
int i=0;
char c;
FAC=0x900;
gpl_link(0x18);
FAC=0xB00;
gpl_link(0x4A);
while(1) {
interrupts();
if(key_scan(&c)) {
c=random_byte(26)+65;
vdp_copy_from_sys(i,&c,1);
i++; if(i>=32*24)i=0;
gpl_link(0x34);
}
}
}
movb r9, @>8C02 INCORRECT mov r9, r2 ori r2, >4000 movb r2, @>8C02 movb r1, @>8C00 inc r9 ci r9, >2FF
mov r2, r1 swpb r1 CORRECT movb r1, @>8C02 mov r2, r1 ori r1, >4000 movb r1, @>8C02 movb r3, @>8C00 inc r2 ci r2, >2FF
gplws equ 0x83E0 def kscan kscan lwpi gplws bl @>E lwpi >8300 b *r11
UTILS.zip 9.38K
6 downloads
Posted Sun Aug 21, 2011 11:23 AM
Posted Mon Aug 22, 2011 9:37 AM
lucien2, on Sun Aug 21, 2011 11:23 AM, said:
static void parse_type_8a(struct buffer *buffer, disassemble_info *info, char *text)
{
// |15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0|
// register, count |Opcode | 0|Register |
info->fprintf_func (info->stream, "%s r%d",
text, buffer->opcode & 0xF);
}
Posted Tue Aug 23, 2011 1:21 AM
{ "stst", 0x02C0, {ARG_REGISTER, ARG_NONE}},
and you are back in business.stst r0, >0000
Posted Tue Aug 23, 2011 4:55 AM
insomnia, on Tue Aug 23, 2011 1:21 AM, said:
Quote
Posted Thu Mar 15, 2012 12:17 AM
Posted Thu Mar 15, 2012 1:35 AM
insomnia said:
Posted Thu Mar 15, 2012 5:16 AM
insomnia, on Thu Mar 15, 2012 12:17 AM, said:
Quote
Posted Thu Mar 15, 2012 8:07 AM
sometimes99er, on Thu Mar 15, 2012 1:35 AM, said:
void do_something()
{
char x;
int y;
...
y=((int)x)<<4;
...
}
* Assume x has a value of -4 (>FC), and is stored in r2 as >FCxx * y = (-4)<<4 = -4 * 16 = -64 = >FFC0 sra r2, 8 * Convert to signed integer (r2=FFFC) sla r2, 4 * Left shift converted value (r2=FFC0)
* Assume x has a value of -4 (>FC), and is stored in r2 as >FCxx * y = (-4)<<4 = -4 * 16 = -64 = >FFC0 sra r2, 4 * Shift into final position (r2=FFCx) andi r2, >FFF0 * Mask unknown bits (r2=FFC0)
* Assume x has a value of 252 (>FC), and is stored in r2 as >FCxx * y = 252<<4 = 252 * 16 = 4032 = >0FC0 srl r2, 4 * Shift into final position (r2=0FCx) andi r2, >FFF0 * Mask unknown bits (r2=0FC0)
Posted Thu Mar 15, 2012 9:56 AM
Posted Sun Mar 18, 2012 11:48 AM
Edited by lucien2, Mon Mar 19, 2012 12:57 AM.
Posted Mon Apr 16, 2012 10:12 PM
0 members, 0 guests, 0 anonymous users