@@ -1328,8 +1328,6 @@ private void cdmemsetn(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pr
13281328 tym_t tyv = tybasic(evalue.Ety);
13291329 const szv = tysize(tyv);
13301330 assert (cast (int )szv > 1 );
1331- if (tyfloating(tyv))
1332- assert (0 ); // TODO AArch64
13331331 regm_t vregs = cgstate.allregs & ~ cregs;
13341332 scodelem(cgstate,cdb,evalue,vregs,cregs,false );
13351333
@@ -1396,14 +1394,20 @@ private void cdmemsetn(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pr
13961394 uint opc;
13971395 uint imm3;
13981396 INSTR .szToSizeOpc(szv,imm3,opc); // shift 0..4
1399- assert (szv != REGSIZE * 2 ); // TODO AArch64
1397+ if (szv == REGSIZE * 2 )
1398+ {
1399+ imm3 = 3 ;
1400+ opc = 0 ;
1401+ }
14001402 cdb.gen1(INSTR .addsub_ext(1 ,op,S,opt,Rc,option,imm3,Rd,Rl));
14011403
14021404 if (Rp != Rd)
14031405 genmovreg(cdb,Rp,Rd);
14041406
14051407 cdb.gen1(INSTR .ldst_immpost(imm3,0 ,0 ,0 ,Rp,Rv)); // L2: STR Rv,[Rp],#0 // *Rp++ = Rv
14061408 code* L2 = cdb.last();
1409+ if (szv == REGSIZE * 2 )
1410+ cdb.gen1(INSTR .ldst_immpost(imm3,0 ,0 ,0 ,Rp,Rvhi)); // L2: STR Rvhi,[Rp],#0 // *Rp++ = Rvhi
14071411 cdb.gen1(INSTR .cmp_shift(1 ,Rl,0 ,0 ,Rp)); // CMP Rp,Rl
14081412 genBranch(cdb,COND .ne,FL .code,cast (block* )L2 ); // b.ne L2
14091413 cdb.append(c1);
0 commit comments