Mercurial > pub > dyncall > dyncall
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 } |