Skip to content

Commit c276c16

Browse files
committed
Implement Fibers
RFC: https://wiki.php.net/rfc/fibers Closes GH-6875.
1 parent ba33757 commit c276c16

File tree

112 files changed

+7048
-9
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

112 files changed

+7048
-9
lines changed

CONTRIBUTING.md

+1
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ locations.
135135
├─ .git/ # Git configuration and source directory
136136
├─ TSRM/ # Thread Safe Resource Manager
137137
└─ Zend/ # Zend Engine
138+
├─ asm/ # Bundled from src/asm in https://github.com/boostorg/context
138139
├─ zend_vm_execute.h # Generated by `Zend/zend_vm_gen.php`
139140
├─ zend_vm_opcodes.c # Generated by `Zend/zend_vm_gen.php`
140141
├─ zend_vm_opcodes.h # Generated by `Zend/zend_vm_gen.php`

UPGRADING

+2
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ PHP 8.1 UPGRADE NOTES
153153
RFC: https://wiki.php.net/rfc/enumerations
154154
. Added support for never return type
155155
RFC: https://wiki.php.net/rfc/noreturn_type
156+
. Added support for fibers.
157+
RFC: https://wiki.php.net/rfc/fibers
156158

157159
- Curl:
158160
. Added CURLOPT_DOH_URL option.

Zend/asm/LICENSE

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
Boost Software License - Version 1.0 - August 17th, 2003
2+
3+
Permission is hereby granted, free of charge, to any person or organization
4+
obtaining a copy of the software and accompanying documentation covered by
5+
this license (the "Software") to use, reproduce, display, distribute,
6+
execute, and transmit the Software, and to prepare derivative works of the
7+
Software, and to permit third-parties to whom the Software is furnished to
8+
do so, all subject to the following:
9+
10+
The copyright notices in the Software and this entire statement, including
11+
the above license grant, this restriction and the following disclaimer,
12+
must be included in all copies of the Software, in whole or in part, and
13+
all derivative works of the Software, unless such copies or derivative
14+
works are solely in the form of machine-executable object code generated by
15+
a source language processor.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
20+
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
21+
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
22+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23+
DEALINGS IN THE SOFTWARE.

Zend/asm/jump_arm64_aapcs_elf_gas.S

+114
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
/*
2+
Copyright Edward Nevill + Oliver Kowalke 2015
3+
Distributed under the Boost Software License, Version 1.0.
4+
(See accompanying file LICENSE_1_0.txt or copy at
5+
http://www.boost.org/LICENSE_1_0.txt)
6+
*/
7+
/*******************************************************
8+
* *
9+
* ------------------------------------------------- *
10+
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
11+
* ------------------------------------------------- *
12+
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
13+
* ------------------------------------------------- *
14+
* | d8 | d9 | d10 | d11 | *
15+
* ------------------------------------------------- *
16+
* ------------------------------------------------- *
17+
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
18+
* ------------------------------------------------- *
19+
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
20+
* ------------------------------------------------- *
21+
* | d12 | d13 | d14 | d15 | *
22+
* ------------------------------------------------- *
23+
* ------------------------------------------------- *
24+
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
25+
* ------------------------------------------------- *
26+
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
27+
* ------------------------------------------------- *
28+
* | x19 | x20 | x21 | x22 | *
29+
* ------------------------------------------------- *
30+
* ------------------------------------------------- *
31+
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
32+
* ------------------------------------------------- *
33+
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
34+
* ------------------------------------------------- *
35+
* | x23 | x24 | x25 | x26 | *
36+
* ------------------------------------------------- *
37+
* ------------------------------------------------- *
38+
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
39+
* ------------------------------------------------- *
40+
* | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
41+
* ------------------------------------------------- *
42+
* | x27 | x28 | FP | LR | *
43+
* ------------------------------------------------- *
44+
* ------------------------------------------------- *
45+
* | 40 | 41 | 42 | 43 | | | *
46+
* ------------------------------------------------- *
47+
* | 0xa0| 0xa4| 0xa8| 0xac| | | *
48+
* ------------------------------------------------- *
49+
* | PC | align | | | *
50+
* ------------------------------------------------- *
51+
* *
52+
*******************************************************/
53+
54+
.file "jump_arm64_aapcs_elf_gas.S"
55+
.text
56+
.align 2
57+
.global jump_fcontext
58+
.type jump_fcontext, %function
59+
jump_fcontext:
60+
# prepare stack for GP + FPU
61+
sub sp, sp, #0xb0
62+
63+
# save d8 - d15
64+
stp d8, d9, [sp, #0x00]
65+
stp d10, d11, [sp, #0x10]
66+
stp d12, d13, [sp, #0x20]
67+
stp d14, d15, [sp, #0x30]
68+
69+
# save x19-x30
70+
stp x19, x20, [sp, #0x40]
71+
stp x21, x22, [sp, #0x50]
72+
stp x23, x24, [sp, #0x60]
73+
stp x25, x26, [sp, #0x70]
74+
stp x27, x28, [sp, #0x80]
75+
stp x29, x30, [sp, #0x90]
76+
77+
# save LR as PC
78+
str x30, [sp, #0xa0]
79+
80+
# store RSP (pointing to context-data) in X0
81+
mov x4, sp
82+
83+
# restore RSP (pointing to context-data) from X1
84+
mov sp, x0
85+
86+
# load d8 - d15
87+
ldp d8, d9, [sp, #0x00]
88+
ldp d10, d11, [sp, #0x10]
89+
ldp d12, d13, [sp, #0x20]
90+
ldp d14, d15, [sp, #0x30]
91+
92+
# load x19-x30
93+
ldp x19, x20, [sp, #0x40]
94+
ldp x21, x22, [sp, #0x50]
95+
ldp x23, x24, [sp, #0x60]
96+
ldp x25, x26, [sp, #0x70]
97+
ldp x27, x28, [sp, #0x80]
98+
ldp x29, x30, [sp, #0x90]
99+
100+
# return transfer_t from jump
101+
# pass transfer_t as first arg in context function
102+
# X0 == FCTX, X1 == DATA
103+
mov x0, x4
104+
105+
# load pc
106+
ldr x4, [sp, #0xa0]
107+
108+
# restore stack from GP + FPU
109+
add sp, sp, #0xb0
110+
111+
ret x4
112+
.size jump_fcontext,.-jump_fcontext
113+
# Mark that we don't need executable stack.
114+
.section .note.GNU-stack,"",%progbits

Zend/asm/jump_arm64_aapcs_macho_gas.S

+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/*
2+
Copyright Edward Nevill + Oliver Kowalke 2015
3+
Distributed under the Boost Software License, Version 1.0.
4+
(See accompanying file LICENSE_1_0.txt or copy at
5+
http://www.boost.org/LICENSE_1_0.txt)
6+
*/
7+
/*******************************************************
8+
* *
9+
* ------------------------------------------------- *
10+
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
11+
* ------------------------------------------------- *
12+
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
13+
* ------------------------------------------------- *
14+
* | d8 | d9 | d10 | d11 | *
15+
* ------------------------------------------------- *
16+
* ------------------------------------------------- *
17+
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
18+
* ------------------------------------------------- *
19+
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
20+
* ------------------------------------------------- *
21+
* | d12 | d13 | d14 | d15 | *
22+
* ------------------------------------------------- *
23+
* ------------------------------------------------- *
24+
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
25+
* ------------------------------------------------- *
26+
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
27+
* ------------------------------------------------- *
28+
* | x19 | x20 | x21 | x22 | *
29+
* ------------------------------------------------- *
30+
* ------------------------------------------------- *
31+
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
32+
* ------------------------------------------------- *
33+
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
34+
* ------------------------------------------------- *
35+
* | x23 | x24 | x25 | x26 | *
36+
* ------------------------------------------------- *
37+
* ------------------------------------------------- *
38+
* | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | *
39+
* ------------------------------------------------- *
40+
* | 0x80| 0x84| 0x88| 0x8c| 0x90| 0x94| 0x98| 0x9c| *
41+
* ------------------------------------------------- *
42+
* | x27 | x28 | FP | LR | *
43+
* ------------------------------------------------- *
44+
* ------------------------------------------------- *
45+
* | 40 | 41 | 42 | 43 | | | *
46+
* ------------------------------------------------- *
47+
* | 0xa0| 0xa4| 0xa8| 0xac| | | *
48+
* ------------------------------------------------- *
49+
* | PC | align | | | *
50+
* ------------------------------------------------- *
51+
* *
52+
*******************************************************/
53+
54+
.text
55+
.globl _jump_fcontext
56+
.balign 16
57+
_jump_fcontext:
58+
; prepare stack for GP + FPU
59+
sub sp, sp, #0xb0
60+
61+
; save d8 - d15
62+
stp d8, d9, [sp, #0x00]
63+
stp d10, d11, [sp, #0x10]
64+
stp d12, d13, [sp, #0x20]
65+
stp d14, d15, [sp, #0x30]
66+
67+
; save x19-x30
68+
stp x19, x20, [sp, #0x40]
69+
stp x21, x22, [sp, #0x50]
70+
stp x23, x24, [sp, #0x60]
71+
stp x25, x26, [sp, #0x70]
72+
stp x27, x28, [sp, #0x80]
73+
stp fp, lr, [sp, #0x90]
74+
75+
; save LR as PC
76+
str lr, [sp, #0xa0]
77+
78+
; store RSP (pointing to context-data) in X0
79+
mov x4, sp
80+
81+
; restore RSP (pointing to context-data) from X1
82+
mov sp, x0
83+
84+
; load d8 - d15
85+
ldp d8, d9, [sp, #0x00]
86+
ldp d10, d11, [sp, #0x10]
87+
ldp d12, d13, [sp, #0x20]
88+
ldp d14, d15, [sp, #0x30]
89+
90+
; load x19-x30
91+
ldp x19, x20, [sp, #0x40]
92+
ldp x21, x22, [sp, #0x50]
93+
ldp x23, x24, [sp, #0x60]
94+
ldp x25, x26, [sp, #0x70]
95+
ldp x27, x28, [sp, #0x80]
96+
ldp fp, lr, [sp, #0x90]
97+
98+
; return transfer_t from jump
99+
; pass transfer_t as first arg in context function
100+
; X0 == FCTX, X1 == DATA
101+
mov x0, x4
102+
103+
; load pc
104+
ldr x4, [sp, #0xa0]
105+
106+
; restore stack from GP + FPU
107+
add sp, sp, #0xb0
108+
109+
ret x4

Zend/asm/jump_arm_aapcs_elf_gas.S

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*
2+
Copyright Oliver Kowalke 2009.
3+
Distributed under the Boost Software License, Version 1.0.
4+
(See accompanying file LICENSE_1_0.txt or copy at
5+
http://www.boost.org/LICENSE_1_0.txt)
6+
*/
7+
8+
/*******************************************************
9+
* *
10+
* ------------------------------------------------- *
11+
* | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | *
12+
* ------------------------------------------------- *
13+
* | 0x0 | 0x4 | 0x8 | 0xc | 0x10| 0x14| 0x18| 0x1c| *
14+
* ------------------------------------------------- *
15+
* | s16 | s17 | s18 | s19 | s20 | s21 | s22 | s23 | *
16+
* ------------------------------------------------- *
17+
* ------------------------------------------------- *
18+
* | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | *
19+
* ------------------------------------------------- *
20+
* | 0x20| 0x24| 0x28| 0x2c| 0x30| 0x34| 0x38| 0x3c| *
21+
* ------------------------------------------------- *
22+
* | s24 | s25 | s26 | s27 | s28 | s29 | s30 | s31 | *
23+
* ------------------------------------------------- *
24+
* ------------------------------------------------- *
25+
* | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | *
26+
* ------------------------------------------------- *
27+
* | 0x40| 0x44| 0x48| 0x4c| 0x50| 0x54| 0x58| 0x5c| *
28+
* ------------------------------------------------- *
29+
* |hiddn| v1 | v2 | v3 | v4 | v5 | v6 | v7 | *
30+
* ------------------------------------------------- *
31+
* ------------------------------------------------- *
32+
* | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | *
33+
* ------------------------------------------------- *
34+
* | 0x60| 0x64| 0x68| 0x6c| 0x70| 0x74| 0x78| 0x7c| *
35+
* ------------------------------------------------- *
36+
* | v8 | lr | pc | FCTX| DATA| | *
37+
* ------------------------------------------------- *
38+
* *
39+
*******************************************************/
40+
41+
.file "jump_arm_aapcs_elf_gas.S"
42+
.text
43+
.globl jump_fcontext
44+
.align 2
45+
.type jump_fcontext,%function
46+
.syntax unified
47+
jump_fcontext:
48+
@ save LR as PC
49+
push {lr}
50+
@ save hidden,V1-V8,LR
51+
push {a1,v1-v8,lr}
52+
53+
@ prepare stack for FPU
54+
sub sp, sp, #64
55+
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
56+
@ save S16-S31
57+
vstmia sp, {d8-d15}
58+
#endif
59+
60+
@ store RSP (pointing to context-data) in A1
61+
mov a1, sp
62+
63+
@ restore RSP (pointing to context-data) from A2
64+
mov sp, a2
65+
66+
#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
67+
@ restore S16-S31
68+
vldmia sp, {d8-d15}
69+
#endif
70+
@ prepare stack for FPU
71+
add sp, sp, #64
72+
73+
@ restore hidden,V1-V8,LR
74+
pop {a4,v1-v8,lr}
75+
76+
@ return transfer_t from jump
77+
str a1, [a4, #0]
78+
str a3, [a4, #4]
79+
@ pass transfer_t as first arg in context function
80+
@ A1 == FCTX, A2 == DATA
81+
mov a2, a3
82+
83+
@ restore PC
84+
pop {pc}
85+
.size jump_fcontext,.-jump_fcontext
86+
87+
@ Mark that we don't need executable stack.
88+
.section .note.GNU-stack,"",%progbits

0 commit comments

Comments
 (0)