On Mon, Sep 2, 2024 at 5:17 AM 18楼梦想改造家 <[email protected]> wrote:
>
> Hi:
>
>       I try to read/understand some code in v8 csa sub-system, like this:
>
> ``` c++
>   DebugBreak(); // [+] @a
>   if (IsHoleyElementsKind(kind)) {   // [+] if statement
>     condition = UintPtrGreaterThanOrEqual(key, length);
>   } else {
>     DebugBreak(); // [+] @b
>     // We don't support growing here unless the value is being appended.
>     condition = WordEqual(key, length);
>   }
>   Branch(condition, &grow_case, &no_grow_case);  // [+] Branch statement
> ```
> I inserted two breakpoints at points A and B. I originally thought that 
> between these two breakpoints, the code corresponding to 
> |IsHoleyElementsKind(kind)| would be generated to check |kind|. However, it 
> was not the case. There is no other code between the two |DebugBreak| 
> instructions.
>
> ``` c++
> 00007ff6`97326605 cc int 3
> 00007ff6`97326606 cc int 3
> 00007ff6`97326607 4d8be0 mov r12,r8
> ```
>
> This means that my assumption was obviously wrong. It seems that I confused 
> the difference between the if keyword and the Branch keyword. So, I came up 
> with the following hypothesis:
>
> If we want to achieve an effect similar to if in CSA, we need to use keywords 
> like Branch.
> What is the role of if in CSA? I suspect that it is handled by mksnapshot to 
> generate different backup codes for different kind. Suppose there are five 
> kinds in total, then five similar pieces of code would be generated.
>
> Please tell me if my assumption is correct. If not, what is the difference 
> between if and Branch in CSA?
>
> If my assumption is correct, it seems that the kind should only be determined 
> at runtime, so how does V8 know which piece of code to use?
>
> Thank you.

To add to Nico's reply -

That code snippet is from CodeStubAssembler::CheckForCapacityGrow(), right?

V8 at that point knows if it's generating machine code for holey or
non-holey objects. It doesn't have to generate a runtime "is holey?"
type check because it already knows and can specialize right away.

-- 
-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-dev/CAHQurc-bEUsMD%2BaxC2dgaphSumJqSxg5W3pfy4FNiS0P7%3D7GKw%40mail.gmail.com.

Reply via email to