comparison contextSwitch.s @ 134:a9b72021f053

Distributed memory management w/o free requests working
author Merten Sach <msach@mailbox.tu-berlin.de>
date Fri, 16 Sep 2011 16:19:24 +0200
parents 9ddbb071142d
children 99343ffe1918
comparison
equal deleted inserted replaced
3:bbdbf025a867 4:043fc655dfc8
1 .data 1 .data
2 2
3 3
4 .text 4 .text
5 5 /* VirtProcr offsets:
6 * 0x10 stackPtr
7 * 0x18 framePtr
8 * 0x20 nextInstrPt
9 * 0x30 coreLoopFramePtr
10 * 0x38 coreLoopStackPtr
11 *
12 * _VMSMasterEnv offsets:
13 * 0x38 coreLoopReturnPt
14 * 0x44 masterLock
15 */
6 //Save return label address for the coreLoop to pointer 16 //Save return label address for the coreLoop to pointer
7 //Arguments: Pointer to variable holding address 17 //Arguments: Pointer to variable holding address
8 .globl saveCoreLoopReturnAddr 18 .globl saveCoreLoopReturnAddr
9 saveCoreLoopReturnAddr: 19 saveCoreLoopReturnAddr:
10 movq $coreLoopReturn, %rcx #load label address 20 movq $coreLoopReturn, %rcx #load label address
21 movq (%rsp) , %rax #get function addr 31 movq (%rsp) , %rax #get function addr
22 jmp *%rax 32 jmp *%rax
23 33
24 //Switches form CoreLoop to VP ether a normal VP or the Master Loop 34 //Switches form CoreLoop to VP ether a normal VP or the Master Loop
25 //switch to virt procr's stack and frame ptr then jump to virt procr fn 35 //switch to virt procr's stack and frame ptr then jump to virt procr fn
26 /* VirtProcr offsets:
27 * 0x10 stackPtr
28 * 0x18 framePtr
29 * 0x20 nextInstrPt
30 * 0x30 coreLoopFramePtr
31 * 0x38 coreLoopStackPtr
32 *
33 * _VMSMasterEnv offsets:
34 * 0x48 coreLoopReturnPt
35 * 0x54 masterLock
36 */
37 .globl switchToVP 36 .globl switchToVP
38 switchToVP: 37 switchToVP:
39 #VirtProcr in %rdi 38 #VirtProcr in %rdi
40 movq %rsp , 0x38(%rdi) #save core loop stack pointer 39 movq %rsp , 0x38(%rdi) #save core loop stack pointer
41 movq %rbp , 0x30(%rdi) #save core loop frame pointer 40 movq %rbp , 0x30(%rdi) #save core loop frame pointer
46 coreLoopReturn: 45 coreLoopReturn:
47 ret 46 ret
48 47
49 48
50 //switches to core loop. saves return address 49 //switches to core loop. saves return address
51 /* VirtProcr offsets:
52 * 0x10 stackPtr
53 * 0x18 framePtr
54 * 0x20 nextInstrPt
55 * 0x30 coreLoopFramePtr
56 * 0x38 coreLoopStackPtr
57 *
58 * _VMSMasterEnv offsets:
59 * 0x48 coreLoopReturnPt
60 * 0x54 masterLock
61 */
62 .globl switchToCoreLoop 50 .globl switchToCoreLoop
63 switchToCoreLoop: 51 switchToCoreLoop:
64 #VirtProcr in %rdi 52 #VirtProcr in %rdi
65 movq $VPReturn , 0x20(%rdi) #store return address 53 movq $VPReturn , 0x20(%rdi) #store return address
66 movq %rsp , 0x10(%rdi) #save stack pointer 54 movq %rsp , 0x10(%rdi) #save stack pointer
67 movq %rbp , 0x18(%rdi) #save frame pointer 55 movq %rbp , 0x18(%rdi) #save frame pointer
68 movq 0x38(%rdi), %rsp #restore stack pointer 56 movq 0x38(%rdi), %rsp #restore stack pointer
69 movq 0x30(%rdi), %rbp #restore frame pointer 57 movq 0x30(%rdi), %rbp #restore frame pointer
70 movq $_VMSMasterEnv, %rcx 58 movq $_VMSMasterEnv, %rcx
71 movq (%rcx) , %rcx 59 movq (%rcx) , %rcx
72 movq 0x48(%rcx), %rax #get CoreLoopStartPt 60 movq 0x38(%rcx), %rax #get CoreLoopStartPt
73 jmp *%rax #jmp to CoreLoop 61 jmp *%rax #jmp to CoreLoop
74 VPReturn: 62 VPReturn:
75 ret 63 ret
76 64
77 65
78 66
79 //switches to core loop from master. saves return address 67 //switches to core loop from master. saves return address
80 //Releases masterLock so the next MasterLoop can be executed 68 //Releases masterLock so the next MasterLoop can be executed
81 /* VirtProcr offsets:
82 * 0x10 stackPtr
83 * 0x18 framePtr
84 * 0x20 nextInstrPt
85 * 0x30 coreLoopFramePtr
86 * 0x38 coreLoopStackPtr
87 *
88 * _VMSMasterEnv offsets:
89 * 0x48 coreLoopReturnPt
90 * 0x54 masterLock
91 */
92 .globl masterSwitchToCoreLoop 69 .globl masterSwitchToCoreLoop
93 masterSwitchToCoreLoop: 70 masterSwitchToCoreLoop:
94 #VirtProcr in %rdi 71 #VirtProcr in %rdi
95 movq $MasterReturn, 0x20(%rdi) #store return address 72 movq $MasterReturn, 0x20(%rdi) #store return address
96 movq %rsp , 0x10(%rdi) #save stack pointer 73 movq %rsp , 0x10(%rdi) #save stack pointer
97 movq %rbp , 0x18(%rdi) #save frame pointer 74 movq %rbp , 0x18(%rdi) #save frame pointer
98 movq 0x38(%rdi), %rsp #restore stack pointer 75 movq 0x38(%rdi), %rsp #restore stack pointer
99 movq 0x30(%rdi), %rbp #restore frame pointer 76 movq 0x30(%rdi), %rbp #restore frame pointer
100 movq $_VMSMasterEnv, %rcx 77 movq $_VMSMasterEnv, %rcx
101 movq (%rcx) , %rcx 78 movq (%rcx) , %rcx
102 movq 0x48(%rcx), %rax #get CoreLoopStartPt 79 movq 0x38(%rcx), %rax #get CoreLoopStartPt
103 movl $0x0 , 0x54(%rcx) #release lock 80 movl $0x0 , 0x44(%rcx) #release lock
104 jmp *%rax #jmp to CoreLoop 81 jmp *%rax #jmp to CoreLoop
105 MasterReturn: 82 MasterReturn:
106 ret 83 ret
107 84
108 85
110 //therefor switch to coreLoop context from master context 87 //therefor switch to coreLoop context from master context
111 // no need to call because the stack is already set up for switchVP 88 // no need to call because the stack is already set up for switchVP
112 // and virtPr is in %rdi 89 // and virtPr is in %rdi
113 // and both functions have the same argument. 90 // and both functions have the same argument.
114 // do not save register of VP because this function will never return 91 // do not save register of VP because this function will never return
115 /* VirtProcr offsets:
116 * 0x10 stackPtr
117 * 0x18 framePtr
118 * 0x20 nextInstrPt
119 * 0x30 coreLoopFramePtr
120 * 0x38 coreLoopStackPtr
121 *
122 * _VMSMasterEnv offsets:
123 * 0x48 coreLoopReturnPt
124 * 0x58 masterLock
125 */
126 .globl asmTerminateCoreLoop 92 .globl asmTerminateCoreLoop
127 asmTerminateCoreLoop: 93 asmTerminateCoreLoop:
128 #VirtProcr in %rdi 94 #VirtProcr in %rdi
129 movq 0x38(%rdi), %rsp #restore stack pointer 95 movq 0x38(%rdi), %rsp #restore stack pointer
130 movq 0x30(%rdi), %rbp #restore frame pointer 96 movq 0x30(%rdi), %rbp #restore frame pointer