79079855

Date: 2024-10-11 22:26:29
Score: 1.5
Natty:
Report link

After addressing @PeterCordes suggestions:


                TokenType::MemoryScan(n) => { 
                    let loop_label = format!("loop_memory_scan{}", label_counter);
                    label_counter += 1;
                    
                    let constant = match *n {
                        1 => format!("    cbz x8, {}\n", loop_label),  
                        2 => "    ands x8, x8, #0x0f0f0f0f0f0f0f0f\n".to_string(),  
                        4 => "    ands x8, x8, #0x000f000f000f000f\n".to_string(),  
                        8 => "    ands x8, x8, #0x0000000f0000000f\n".to_string(),  
                        _ => unreachable!(),
                    };
                    assembly.push_str(&format!("{}:\n", loop_label));  
                    assembly.push_str("    ld1.16b {v0}, [x19], #16\n");  
                    assembly.push_str("    cmeq.16b v0, v0, #0\n");        
                    assembly.push_str("    shrn.8b v0, v0, #4\n");
                    assembly.push_str("    fmov x8, d0\n");  
                    assembly.push_str(&constant);  
                    if *n != 1 {
                        assembly.push_str(&format!("    b.eq {}\n", loop_label));
                    }  
                    assembly.push_str("    rbit x9, x8\n");  
                    assembly.push_str("    clz x9, x9\n");  
                    assembly.push_str("    ubfx x9, x9, #2, #30\n");
                    assembly.push_str("    sub x19, x19, #16\n");  
                    assembly.push_str("    add x19, x19, x9\n"); 
                },    

Thanks a lot! I guess there is no pre-increment in arm, so I used the post-increment and subtracted before adding the index to handle additional increment from the last try. This code turned out working fine.

Reasons:
  • Blacklisted phrase (0.5): Thanks
  • Long answer (-1):
  • Has code block (-0.5):
  • User mentioned (1): @PeterCordes
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: user27680699