Mercurial > hg > CbC > old > device
comparison Idea @ 16:ca0bce3b4810
struct copy
author | kono |
---|---|
date | Mon, 17 Jan 2000 16:08:16 +0900 |
parents | 595a24e0b90e |
children | df7fa8cee67b |
comparison
equal
deleted
inserted
replaced
15:6667dbd4f718 | 16:ca0bce3b4810 |
---|---|
1084 new-environment() みたいなlibrary があれば、thread にできる。 | 1084 new-environment() みたいなlibrary があれば、thread にできる。 |
1085 | 1085 |
1086 join は? | 1086 join は? |
1087 | 1087 |
1088 funcall を用意すると良いね。 | 1088 funcall を用意すると良いね。 |
1089 | |
1090 Mon Jan 17 15:23:34 JST 2000 | |
1091 | |
1092 struct aa f1() { | |
1093 return bb; | |
1094 } | |
1095 | |
1096 みたいなのは? 関数の型か代入の型を見て、crn にpointerを渡して、 | |
1097 あとでcopyしてから stack を畳む。 | |
1098 | |
1099 # bb=f1(aaa); | |
1100 movl $bb,%eax | |
1101 pushl %eax | |
1102 movl $aaa,%eax | |
1103 pushl %eax | |
1104 call main2 | |
1105 popl %edx | |
1106 copy %eax,%edx,$400 | |
1107 addl $400,%esp | |
1108 # return a1; | |
1109 | |
1110 あ、でも、それだと、local変数を返したときに困るね。leave; ret; | |
1111 してはいけなくて... | |
1112 | |
1113 あ、やっぱり、こういう場合はコピー先をmain2に引き渡しているみたいね。 | |
1114 void f1(struct aa *ret) { | |
1115 *ret = bb ; | |
1116 return; | |
1117 } | |
1118 と同じか。これは簡単。 | |
1119 f1().a[55] | |
1120 みたいな場合は、局所変数に強制的に取ってしまうみたいね。それはそうだ... | |
1121 が、うちの実装だとちょっと厳しいか。 | |
1122 leal $-sizeof(struct),%esp | |
1123 pushl %esp | |
1124 なんだけど、関数呼び出しの途中ではできないから.... | |
1125 | |
1126 # main(ac,av) | |
1127 # int ac; | |
1128 .align 2 | |
1129 .globl main | |
1130 main: | |
1131 .type main,@function | |
1132 pushl %ebp | |
1133 movl %esp,%ebp | |
1134 pushl %ebx | |
1135 pushl %ecx | |
1136 pushl %edx | |
1137 # char *av[]; | |
1138 # { | |
1139 # register int i; | |
1140 # register char *p; | |
1141 # int j = 3; | |
1142 # struct { int b; void (*c)(struct aa); } q = {3,main1},r; | |
1143 # | |
1144 # j = 3; | |
1145 subl $20,%esp | |
1146 | |
1147 このsublを後から指定してやればOk。 | |
1148 | |
1149 でも、それだと jump の時にずれない? ずれるか? ずれるね。うーん。 | |
1150 実行時にチェックしてやるのも変だし。 | |
1151 | |
1152 まぁ、それほど必要な機能ではないんだけど。 | |
1153 | |
1154 これもcontinuationを渡してやると言う手法が使えないことはないんだが... | |
1155 | |
1156 関数呼び出しの最初にやってやればいいか。それでできるかな? |