// rt/streq.s — string equality at the runtime layer. // // Called from cgen for `a == b` / `a != b` when both operands are str. // SysV ABI: a.ptr in DI, a.len in SI, b.ptr in DX, b.len in CX. // Returns 1 in AX if equal, 0 otherwise. Caller flips for !=. TEXT rt_streq,$0 CMPQ CX, SI // lengths must match JNE rt_streq_no // SI now holds the (shared) length; iterate while SI > 0 rt_streq_loop: CMPQ $0, SI JE rt_streq_yes MOVZBQ (DI), AX MOVZBQ (DX), R8 CMPQ R8, AX JNE rt_streq_no ADDQ $1, DI ADDQ $1, DX SUBQ $1, SI JMP rt_streq_loop rt_streq_yes: MOVQ $1, AX RET rt_streq_no: MOVQ $0, AX RET