使用V8源中的arm组件遍历字符串

使用V8源中的arm组件遍历字符串,arm,v8,Arm,V8,我正在尝试在RegExpExecStub::Generate函数的arm/code stubs arm.cc中实现正则表达式的快速路径。主题字符串存储在寄存器“r4”中。我需要遍历字符串中的一个字符一个字符地遍历,但我似乎无法做到这一点。我尝试过以下方法: __ ldrb( r3, MemOperand(r4,0)); //to get to 0th char and store it to r3 或: 我正在使用d8 shell检查寄存器的值,方法是在上述语句之后在断点处停止,并执行pri

我正在尝试在
RegExpExecStub::Generate
函数的
arm/code stubs arm.cc
中实现正则表达式的快速路径。主题字符串存储在寄存器“r4”中。我需要遍历字符串中的一个字符一个字符地遍历,但我似乎无法做到这一点。我尝试过以下方法:

__ ldrb( r3, MemOperand(r4,0)); 
//to get to 0th char and store it to r3
或:


我正在使用d8 shell检查寄存器的值,方法是在上述语句之后在断点处停止,并执行
print r3
检查字符是否已加载。然而,当我尝试上述语句时,我在寄存器中看到随机值。理想情况下,我应该看到十六进制形式的字符。

证明正确的偏移量应该是String::kSize-1,依此类推

 __ ldrb( r3, MemOperand(r4,String::kSize-1)); //to get 0th character
 __ ldrb( r3, MemOperand(r4,String::kSize)); //to get 1st character
 __ ldrb( r3, MemOperand(r4,String::kSize+1)); //to get 2nd character`
 __ ldrb( r3, MemOperand(r4,String::kSize-1)); //to get 0th character
 __ ldrb( r3, MemOperand(r4,String::kSize)); //to get 1st character
 __ ldrb( r3, MemOperand(r4,String::kSize+1)); //to get 2nd character`