在 V8 源代码中使用 arm 程序集遍历字符串

Traversing a string using arm assembly inside V8 source

我正在尝试在 RegExpExecStub::Generate 函数中为 arm/code-stubs-arm.cc 中的正则表达式实现快速路径。主题字符串存储在寄存器 'r4' 中。我需要在字符串中逐个字符地遍历,但我似乎做不到。我尝试过类似的东西:

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

或者:

 __ ldrb( r3, MemOperand(r4,String::kLengthOffset)); 
//to do the same thing as above in case the data begins after length field.

我正在使用 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`