00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00036 #ifndef CTRUMP_RUNTIME_SPE_H
00037 #define CTRUMP_RUNTIME_SPE_H
00038
00039 #include <spu_mfcio.h>
00040
00041 #ifdef __cplusplus
00042 extern "C" {
00043 #endif
00044
00045 static void
00046 ctrump_put_unaligned(void *lsp,
00047 unsigned long long ea,
00048 unsigned int size,
00049 unsigned int tag,
00050 int tid, int rid)
00051 {
00052 unsigned char *ls = (unsigned char *)lsp;
00053 unsigned int size_aligned;
00054
00055 if (ea & 1) {
00056 mfc_put(ls, ea, 1, tag, tid, rid);
00057 ea += 1;
00058 ls += 1;
00059 size -= 1;
00060 }
00061 if (ea & 2) {
00062 mfc_put(ls, ea, 2, tag, tid, rid);
00063 ea += 2;
00064 ls += 2;
00065 size -= 2;
00066 }
00067 if (ea & 4) {
00068 mfc_put(ls, ea, 4, tag, tid, rid);
00069 ea += 4;
00070 ls += 4;
00071 size -= 4;
00072 }
00073 if (ea & 8) {
00074 mfc_put(ls, ea, 8, tag, tid, rid);
00075 ea += 8;
00076 ls += 8;
00077 size -= 8;
00078 }
00079
00080 size_aligned = size&~15;
00081 mfc_put(ls, ea, size_aligned, tag, tid, rid);
00082 size -= size_aligned;
00083 ls += size_aligned;
00084 ea += size_aligned;
00085
00086 if (size & 8) {
00087 mfc_put(ls, ea, 8, tag, tid, rid);
00088 ea += 8;
00089 ls += 8;
00090 size -= 8;
00091 }
00092 if (size & 4) {
00093 mfc_put(ls, ea, 4, tag, tid, rid);
00094 ea += 4;
00095 ls += 4;
00096 size -= 4;
00097 }
00098 if (size & 2) {
00099 mfc_put(ls, ea, 2, tag, tid, rid);
00100 ea += 2;
00101 ls += 2;
00102 size -= 2;
00103 }
00104 if (size & 1) {
00105 mfc_put(ls, ea, 1, tag, tid, rid);
00106 ea += 1;
00107 ls += 1;
00108 size -= 1;
00109 }
00110 }
00111
00112
00113 #ifdef __cplusplus
00114 }
00115 #endif
00116
00117 #endif