Skip to content

Instantly share code, notes, and snippets.

@dinfuehr
Created April 23, 2024 12:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dinfuehr/b41f75585877bcb8cf9483127bc3eb34 to your computer and use it in GitHub Desktop.
Save dinfuehr/b41f75585877bcb8cf9483127bc3eb34 to your computer and use it in GitHub Desktop.
Write Barrier in V8 Assembly: RISC-V & X64
--- Raw source ---
(a, b) {
a.x = b;
}
--- Optimized code ---
optimization_id = 0
source_position = 225
kind = TURBOFAN
name = foo
stack_slots = 6
compiler = turbofan
address = 0x4cb0880ab9
Instructions (size = 520)
0x7f8e8c000040 0 00000997 auipc s3, 0x0
0x7f8e8c000044 4 01360e63 beq a2, s3, 28 -> 0x7f8e8c000060 <+0x20>
0x7f8e8c000048 8 04300513 li a0, 67
0x7f8e8c00004c c 02051513 slli a0, a0, 32
0x7f8e8c000050 10 00005e37 lui t3, 0x5
0x7f8e8c000054 14 016e0e33 add t3, t3, s6
0x7f8e8c000058 18 360e3f83 ld t6, 864(t3)
0x7f8e8c00005c 1c 000f80e7 jalr t6
0x7f8e8c000060 20 fe863983 ld s3, -24(a2)
0x7f8e8c000064 24 02f9a983 lw s3, 47(s3)
0x7f8e8c000068 28 20000e37 lui t3, 0x20000
0x7f8e8c00006c 2c 01c9f9b3 and s3, s3, t3
0x7f8e8c000070 30 02098063 beq s3, zero_reg, 32 -> 0x7f8e8c000090 <+0x50>
0x7f8e8c000074 34 3fc78fb7 lui t6, 0x3fc78 ;; off heap target
0x7f8e8c000078 38 ccdf8f93 addi t6, t6, -819
0x7f8e8c00007c 3c 00bf9f93 slli t6, t6, 11
0x7f8e8c000080 40 7c4fef93 ori t6, t6, 0x7c4
0x7f8e8c000084 44 006f9f93 slli t6, t6, 6
0x7f8e8c000088 48 000fef93 ori t6, t6, 0x0
0x7f8e8c00008c 4c 000f8067 jr t6
0x7f8e8c000090 50 fd810113 addi sp, sp, -40
0x7f8e8c000094 54 02113023 sd ra, 32(sp)
0x7f8e8c000098 58 00813c23 sd fp, 24(sp)
0x7f8e8c00009c 5c 01713823 sd s7, 16(sp)
0x7f8e8c0000a0 60 00b13423 sd a1, 8(sp)
0x7f8e8c0000a4 64 00a13023 sd a0, 0(sp)
0x7f8e8c0000a8 68 01810413 addi fp, sp, 24
0x7f8e8c0000ac 6c ff810113 addi sp, sp, -8
0x7f8e8c0000b0 70 f20b3603 ld a2, -224(s6)
0x7f8e8c0000b4 74 ff743023 sd s7, -32(fp)
0x7f8e8c0000b8 78 08267663 bgeu a2, sp, 140 -> 0x7f8e8c000144 <+0x104>
0x7f8e8c0000bc 7c 01843603 ld a2, 24(fp)
0x7f8e8c0000c0 80 00167993 andi s3, a2, 0x1
0x7f8e8c0000c4 84 16098663 beq s3, zero_reg, 364 -> 0x7f8e8c000230 <+0x1f0>
0x7f8e8c0000c8 88 fff63683 ld a3, -1(a2)
0x7f8e8c0000cc 8c 001ce737 lui a4, 0x1ce ;; object: 0x0039ba6331a9 <Map[32](HOLEY_ELEMENTS)>
0x7f8e8c0000d0 90 d3170713 addi a4, a4, -719
0x7f8e8c0000d4 94 00b71713 slli a4, a4, 11
0x7f8e8c0000d8 98 4c676713 ori a4, a4, 0x4c6
0x7f8e8c0000dc 9c 00671713 slli a4, a4, 6
0x7f8e8c0000e0 a0 02976713 ori a4, a4, 0x29
0x7f8e8c0000e4 a4 14e69a63 bne a3, a4, 340 -> 0x7f8e8c000238 <+0x1f8>
0x7f8e8c0000e8 a8 01700693 li a3, 23
0x7f8e8c0000ec ac 02043703 ld a4, 32(fp)
0x7f8e8c0000f0 b0 00d609b3 add s3, a2, a3
0x7f8e8c0000f4 b4 00e9b023 sd a4, 0(s3)
0x7f8e8c0000f8 b8 00177e13 andi t3, a4, 0x1
0x7f8e8c0000fc bc 000e0c63 beq t3, zero_reg, 24 -> 0x7f8e8c000114 <+0xd4>
0x7f8e8c000100 c0 fffc0f37 lui t5, 0xffffffc0
0x7f8e8c000104 c4 01e67e33 and t3, a2, t5
0x7f8e8c000108 c8 000e3e03 ld t3, 0(t3)
0x7f8e8c00010c cc 004e7e13 andi t3, t3, 0x4
0x7f8e8c000110 d0 080e1c63 bne t3, zero_reg, 152 -> 0x7f8e8c0001a8 <+0x168>
0x7f8e8c000114 d4 170b3503 ld a0, 368(s6)
0x7f8e8c000118 d8 fe843283 ld t0, -24(fp)
0x7f8e8c00011c dc 00040113 mv sp, fp
0x7f8e8c000120 e0 00013403 ld fp, 0(sp)
0x7f8e8c000124 e4 00813083 ld ra, 8(sp)
0x7f8e8c000128 e8 01010113 addi sp, sp, 16
0x7f8e8c00012c ec 00300993 li s3, 3
0x7f8e8c000130 f0 0132d463 bge t0, s3, 8 -> 0x7f8e8c000138 <+0xf8>
0x7f8e8c000134 f4 00098293 mv t0, s3
0x7f8e8c000138 f8 00329293 slli t0, t0, 3
0x7f8e8c00013c fc 00510133 add sp, sp, t0
0x7f8e8c000140 100 00008067 ret
0x7f8e8c000144 104 00300613 li a2, 3
0x7f8e8c000148 108 02361613 slli a2, a2, 35
0x7f8e8c00014c 10c ff810113 addi sp, sp, -8
0x7f8e8c000150 110 00c13023 sd a2, 0(sp)
0x7f8e8c000154 114 2ad415b7 lui a1, 0x2ad41 ;; external reference (Runtime::StackGuardWithGap)
0x7f8e8c000158 118 59558593 addi a1, a1, 1429
0x7f8e8c00015c 11c 00b59593 slli a1, a1, 11
0x7f8e8c000160 120 3965e593 ori a1, a1, 0x396
0x7f8e8c000164 124 00659593 slli a1, a1, 6
0x7f8e8c000168 128 0185e593 ori a1, a1, 0x18
0x7f8e8c00016c 12c 00100513 li a0, 1
0x7f8e8c000170 130 001cebb7 lui s7, 0x1ce ;; object: 0x0039ba602a49 <NativeContext[294]>
0x7f8e8c000174 134 d30b8b93 addi s7, s7, -720
0x7f8e8c000178 138 00bb9b93 slli s7, s7, 11
0x7f8e8c00017c 13c 0a9beb93 ori s7, s7, 0xa9
0x7f8e8c000180 140 006b9b93 slli s7, s7, 6
0x7f8e8c000184 144 009beb93 ori s7, s7, 0x9
0x7f8e8c000188 148 3fc78fb7 lui t6, 0x3fc78 ;; off heap target
0x7f8e8c00018c 14c ceff8f93 addi t6, t6, -785
0x7f8e8c000190 150 00bf9f93 slli t6, t6, 11
0x7f8e8c000194 154 337fef93 ori t6, t6, 0x337
0x7f8e8c000198 158 006f9f93 slli t6, t6, 6
0x7f8e8c00019c 15c 000fef93 ori t6, t6, 0x0
0x7f8e8c0001a0 160 000f80e7 jalr t6
0x7f8e8c0001a4 164 f19ff06f j -232 -> 0x7f8e8c0000bc <+0x7c>
0x7f8e8c0001a8 168 fffc0f37 lui t5, 0xffffffc0
0x7f8e8c0001ac 16c 01e77e33 and t3, a4, t5
0x7f8e8c0001b0 170 000e3e03 ld t3, 0(t3)
0x7f8e8c0001b4 174 002e7e13 andi t3, t3, 0x2
0x7f8e8c0001b8 178 f40e0ee3 beq t3, zero_reg, -164 -> 0x7f8e8c000114 <+0xd4>
0x7f8e8c0001bc 17c fc010113 addi sp, sp, -64
0x7f8e8c0001c0 180 03713c23 sd s7, 56(sp)
0x7f8e8c0001c4 184 03113823 sd a7, 48(sp)
0x7f8e8c0001c8 188 02f13423 sd a5, 40(sp)
0x7f8e8c0001cc 18c 02e13023 sd a4, 32(sp)
0x7f8e8c0001d0 190 00d13c23 sd a3, 24(sp)
0x7f8e8c0001d4 194 00c13823 sd a2, 16(sp)
0x7f8e8c0001d8 198 00b13423 sd a1, 8(sp)
0x7f8e8c0001dc 19c 00a13023 sd a0, 0(sp)
0x7f8e8c0001e0 1a0 00d607b3 add a5, a2, a3
0x7f8e8c0001e4 1a4 00060593 mv a1, a2
0x7f8e8c0001e8 1a8 3fc78fb7 lui t6, 0x3fc78 ;; off heap target
0x7f8e8c0001ec 1ac ccbf8f93 addi t6, t6, -821
0x7f8e8c0001f0 1b0 00bf9f93 slli t6, t6, 11
0x7f8e8c0001f4 1b4 123fef93 ori t6, t6, 0x123
0x7f8e8c0001f8 1b8 006f9f93 slli t6, t6, 6
0x7f8e8c0001fc 1bc 020fef93 ori t6, t6, 0x20
0x7f8e8c000200 1c0 000f80e7 jalr t6
0x7f8e8c000204 1c4 00013503 ld a0, 0(sp)
0x7f8e8c000208 1c8 00813583 ld a1, 8(sp)
0x7f8e8c00020c 1cc 01013603 ld a2, 16(sp)
0x7f8e8c000210 1d0 01813683 ld a3, 24(sp)
0x7f8e8c000214 1d4 02013703 ld a4, 32(sp)
0x7f8e8c000218 1d8 02813783 ld a5, 40(sp)
0x7f8e8c00021c 1dc 03013883 ld a7, 48(sp)
0x7f8e8c000220 1e0 03813b83 ld s7, 56(sp)
0x7f8e8c000224 1e4 04010113 addi sp, sp, 64
0x7f8e8c000228 1e8 eedff06f j -276 -> 0x7f8e8c000114 <+0xd4>
0x7f8e8c00022c 1ec 00000013 nop
0x7f8e8c000230 1f0 f50b3f83 ld t6, -176(s6)
0x7f8e8c000234 1f4 000f80e7 jalr t6
0x7f8e8c000238 1f8 f50b3f83 ld t6, -176(s6)
0x7f8e8c00023c 1fc 000f80e7 jalr t6
0x7f8e8c000240 200 f58b3f83 ld t6, -168(s6)
0x7f8e8c000244 204 000f80e7 jalr t6
Inlined functions (count = 0)
Deoptimization Input Data (deopt points = 3)
index bytecode-offset node-id pc
0 2 31 NA
1 2 37 NA
2 -1 23 164
Safepoints (entries = 1, byte size = 14)
0x7f8e8c0001a4 164 slots (sp->fp): 10000000 deopt 2 trampoline: 200
RelocInfo (size = 10)
0x7f8e8c000074 off heap target
0x7f8e8c0000cc full embedded object (0x0039ba6331a9 <Map[20](HOLEY_ELEMENTS)>)
0x7f8e8c000154 external reference (Runtime::StackGuardWithGap) (0x55a82b2ae598)
0x7f8e8c000170 full embedded object (0x0039ba602a49 <NativeContext[126]>)
0x7f8e8c000188 off heap target
0x7f8e8c0001e8 off heap target
--- End code ---
--- Raw source ---
(a, b) {
a.x = b;
}
--- Optimized code ---
optimization_id = 0
source_position = 225
kind = TURBOFAN
name = foo
stack_slots = 6
compiler = turbofan
address = 0x1f3800040745
Instructions (size = 276)
0x5633e0000040 0 488d1df9ffffff REX.W leaq rbx,[rip+0xfffffff9]
0x5633e0000047 7 483bd9 REX.W cmpq rbx,rcx
0x5633e000004a a 740d jz 0x5633e0000059 <+0x19>
0x5633e000004c c ba86000000 movl rdx,0x86
0x5633e0000051 11 41ff9578540000 call [r13+0x5478]
0x5633e0000058 18 cc int3l
0x5633e0000059 19 8b59f4 movl rbx,[rcx-0xc]
0x5633e000005c 1c 490b9de0010000 REX.W orq rbx,[r13+0x1e0]
0x5633e0000063 23 f6431a20 testb [rbx+0x1a],0x20
0x5633e0000067 27 0f85137159d2 jnz 0x5633b2597180 (CompileLazyDeoptimizedCode) ;; near builtin entry
0x5633e000006d 2d 55 push rbp
0x5633e000006e 2e 4889e5 REX.W movq rbp,rsp
0x5633e0000071 31 56 push rsi
0x5633e0000072 32 57 push rdi
0x5633e0000073 33 50 push rax
0x5633e0000074 34 4883ec08 REX.W subq rsp,0x8
0x5633e0000078 38 488975e0 REX.W movq [rbp-0x20],rsi
0x5633e000007c 3c 493b65a0 REX.W cmpq rsp,[r13-0x60] (external value (StackGuard::address_of_jslimit()))
0x5633e0000080 40 0f866e000000 jna 0x5633e00000f4 <+0xb4>
0x5633e0000086 46 488b5518 REX.W movq rdx,[rbp+0x18]
0x5633e000008a 4a f6c201 testb rdx,0x1
0x5633e000008d 4d 0f84b4000000 jz 0x5633e0000147 <+0x107>
0x5633e0000093 53 b9c9bc2900 movl rcx,0x29bcc9 ;; (compressed) object: 0x0d840029bcc9 <Map[16](HOLEY_ELEMENTS)>
0x5633e0000098 58 394aff cmpl [rdx-0x1],rcx
0x5633e000009b 5b 0f85aa000000 jnz 0x5633e000014b <+0x10b>
0x5633e00000a1 61 488b4d20 REX.W movq rcx,[rbp+0x20]
0x5633e00000a5 65 83f903 cmpl rcx,0x3
0x5633e00000a8 68 750d jnz 0x5633e00000b7 <+0x77>
0x5633e00000aa 6a ba3c000000 movl rdx,0x3c
0x5633e00000af 6f 41ff9578540000 call [r13+0x5478]
0x5633e00000b6 76 cc int3l
0x5633e00000b7 77 894a0b movl [rdx+0xb],rcx
0x5633e00000ba 7a f6c101 testb rcx,0x1
0x5633e00000bd 7d 0f8413000000 jz 0x5633e00000d6 <+0x96>
0x5633e00000c3 83 48c7c70000fcff REX.W movq rdi,0xfffc0000
0x5633e00000ca 8a 4823fa REX.W andq rdi,rdx
0x5633e00000cd 8d f60704 testb [rdi],0x4
0x5633e00000d0 90 0f8547000000 jnz 0x5633e000011d <+0xdd>
0x5633e00000d6 96 498d4669 REX.W leaq rax,[r14+0x69]
0x5633e00000da 9a 488b4de8 REX.W movq rcx,[rbp-0x18]
0x5633e00000de 9e 488be5 REX.W movq rsp,rbp
0x5633e00000e1 a1 5d pop rbp
0x5633e00000e2 a2 4883f903 REX.W cmpq rcx,0x3
0x5633e00000e6 a6 7f03 jg 0x5633e00000eb <+0xab>
0x5633e00000e8 a8 c21800 ret 0x18
0x5633e00000eb ab 415a pop r10
0x5633e00000ed ad 488d24cc REX.W leaq rsp,[rsp+rcx*8]
0x5633e00000f1 b1 4152 push r10
0x5633e00000f3 b3 c3 retl
0x5633e00000f4 b4 ba30000000 movl rdx,0x30
0x5633e00000f9 b9 52 push rdx
0x5633e00000fa ba 48bbd02ca1af33560000 REX.W movq rbx,0x5633afa12cd0 ;; external reference (Runtime::StackGuardWithGap)
0x5633e0000104 c4 b801000000 movl rax,0x1
0x5633e0000109 c9 48bef5172800840d0000 REX.W movq rsi,0xd84002817f5 ;; object: 0x0d84002817f5 <NativeContext[294]>
0x5633e0000113 d3 e8a8f396d2 call 0x5633b296f4c0 (CEntry_Return1_ArgvOnStack_NoBuiltinExit) ;; near builtin entry
0x5633e0000118 d8 e969ffffff jmp 0x5633e0000086 <+0x46>
0x5633e000011d dd 8bc9 movl rcx,rcx
0x5633e000011f df 4903ce REX.W addq rcx,r14
0x5633e0000122 e2 48c7c70000fcff REX.W movq rdi,0xfffc0000
0x5633e0000129 e9 4823f9 REX.W andq rdi,rcx
0x5633e000012c ec f60702 testb [rdi],0x2
0x5633e000012f ef 74a5 jz 0x5633e00000d6 <+0x96>
0x5633e0000131 f1 4c8d420b REX.W leaq r8,[rdx+0xb]
0x5633e0000135 f5 53 push rbx
0x5633e0000136 f6 57 push rdi
0x5633e0000137 f7 488bfa REX.W movq rdi,rdx
0x5633e000013a fa 498bd8 REX.W movq rbx,r8
0x5633e000013d fd e83e4554d2 call 0x5633b2544680 (RecordWriteSaveFP) ;; near builtin entry
0x5633e0000142 102 5f pop rdi
0x5633e0000143 103 5b pop rbx
0x5633e0000144 104 eb90 jmp 0x5633e00000d6 <+0x96>
0x5633e0000146 106 90 nop
0x5633e0000147 107 41ff55d0 call [r13-0x30]
0x5633e000014b 10b 41ff55d0 call [r13-0x30]
0x5633e000014f 10f 41ff55d8 call [r13-0x28]
0x5633e0000153 113 90 nop
Inlined functions (count = 0)
Deoptimization Input Data (deopt points = 3)
index bytecode-offset node-id pc
0 2 32 NA
1 2 36 NA
2 -1 19 d8
Safepoints (entries = 1, byte size = 14)
0x5633e0000118 d8 slots (sp->fp): 10000000 deopt 2 trampoline: 10f
RelocInfo (size = d)
0x5633e0000069 near builtin entry
0x5633e0000094 compressed embedded object (0x0d840029bcc9 <Map[10](HOLEY_ELEMENTS)> compressed)
0x5633e00000fc external reference (Runtime::StackGuardWithGap) (0x5633afa12cd0)
0x5633e000010b full embedded object (0x0d84002817f5 <NativeContext[126]>)
0x5633e0000114 near builtin entry
0x5633e000013e near builtin entry
--- End code ---
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment