comparison dyncall/dyncall_callvm_arm32_arm_armhf.c @ 47:c4de113dc1e9

- some armhf comments, doc clarification, cleanup
author cslag
date Sun, 20 Dec 2015 00:09:47 +0100
parents f01895437921
children 9e9d6a90492a
comparison
equal deleted inserted replaced
46:49bf9f6731e7 47:c4de113dc1e9
103 } 103 }
104 } 104 }
105 105
106 static void a_double(DCCallVM* in_p, DCdouble x) 106 static void a_double(DCCallVM* in_p, DCdouble x)
107 { 107 {
108 union {
109 DCdouble d;
110 DCchar b[8];
111 } v;
112
108 DCCallVM_arm32_armhf* p = (DCCallVM_arm32_armhf*)in_p; 113 DCCallVM_arm32_armhf* p = (DCCallVM_arm32_armhf*)in_p;
109 if (p->d < 16) { 114 if (p->d < 16) {
110 * (double*) &p->S[p->d] = x; 115 * (double*) &p->S[p->d] = x;
111 p->d += 2; 116 p->d += 2;
112 if (!(p->s & 1)) { 117 if (!(p->s & 1)) {
114 otherwise, s points to an odd float register. 119 otherwise, s points to an odd float register.
115 */ 120 */
116 p->s = p->d; 121 p->s = p->d;
117 } 122 }
118 } else { 123 } else {
119 p->s = 16; 124 p->s = 16; /* fp registers all full - need to use stack now: stop filling gaps for single precision, also */
120 union { /*@@@decl at top, compat*/
121 DCdouble d;
122 DCchar b[8];
123 } v; // ,w;
124 v.d = x; 125 v.d = x;
125 #if 0 126
126 w.b[0] = v.b[7];
127 w.b[1] = v.b[6];
128 w.b[2] = v.b[5];
129 w.b[3] = v.b[4];
130 w.b[4] = v.b[3];
131 w.b[5] = v.b[2];
132 w.b[6] = v.b[1];
133 w.b[7] = v.b[0];
134 #endif
135 /* 64 bit values need to be aligned on 8 byte boundaries */ 127 /* 64 bit values need to be aligned on 8 byte boundaries */
136 dcVecSkip(&p->mVecHead, dcVecSize(&p->mVecHead) & 4); 128 dcVecSkip(&p->mVecHead, dcVecSize(&p->mVecHead) & 4);
137 dcVecAppend(&p->mVecHead, &v.b[0], sizeof(DCdouble)); 129 dcVecAppend(&p->mVecHead, &v.b[0], sizeof(DCdouble));
138 } 130 }
139 } 131 }