00001
00002
00003
00004
00005
00006
00007
00008 #ifndef _NLIBC_OS1_LIME_H
00009 #define _NLIBC_OS1_LIME_H
00010
00011 #include <sys/types.h>
00012 #include <stdlib.h>
00013 #include <stdio.h>
00014
00015 #pragma PRAGMA_SW_REQ os opt-type ne 3
00016
00018 typedef struct {
00019 uint64_t ctrl;
00020 uint64_t nbytes;
00021 uint64_t vector type[9];
00022 } LimeRecordHeader;
00023
00025 typedef struct {
00026 FILE *fp;
00027 LimeRecordHeader *hdr;
00028 } LimeReader;
00029
00031 typedef struct {
00032 FILE *fp;
00033 LimeRecordHeader *hdr;
00034 } LimeWriter;
00035
00036 #define LIME_MAGIC_NO 1164413355
00037 #define LIME_VERSION 1
00038
00039 #define LIME_SUCCESS 0
00040 #define LIME_ERR_PARAM 1
00041 #define LIME_ERR_HEADER_NEXT 2
00042 #define LIME_ERR_WRITE 3
00043 #define LIME_EOR 4
00044 #define LIME_EOF 5
00045 #define LIME_ERR_READ 6
00046 #define LIME_ERR_SEEK 7
00047 #define LIME_ERR_MBME 8
00048 #define LIME_ERR_CLOSE 9
00049
00050
00051
00067
00068 #ifndef __HAS_MAIN
00069 extern LimeReader* limeCreateReader(FILE *);
00070 #else
00071 #if !defined(__cflow_processed) || defined(_uses_limeCreateReader_lime_h)
00072 LimeReader* limeCreateReader(FILE *fp)
00073 {
00074 LimeReader *r;
00075
00076 if (!fp || !fp->fd) {
00077 errno = EBADF;
00078 return NULL;
00079 }
00080
00081 r = (LimeReader*) malloc(sizeof(LimeReader));
00082
00083 if (r == NULL)
00084 return NULL;
00085
00086 r->fp = fp;
00087 r->hdr = NULL;
00088
00089 asm("\t$lime_create($SYS_LIMEFLG_RD, 0.%0)\n" : : "r" (fp->fd));
00090
00091 return r;
00092 }
00093 #endif
00094 #endif
00095
00096
00097
00113
00114 #ifndef __HAS_MAIN
00115 extern void limeDestroyReader(LimeReader *);
00116 #else
00117 #if !defined(__cflow_processed) || defined(_uses_limeDestroyReader_lime_h)
00118 void limeDestroyReader(LimeReader *r)
00119 {
00120 if (r != NULL) {
00121 asm("\t$lime_destroy($SYS_LIMEFLG_RD, 0.%0)\n" : : "r" (r->fp->fd));
00122 free(r);
00123 r = NULL;
00124 }
00125 }
00126 #endif
00127 #endif
00128
00129
00130
00147
00148 #ifndef __HAS_MAIN
00149 extern int limeReaderNextRecord(LimeReader *);
00150 #else
00151 #if !defined(__cflow_processed) || defined(_uses_limeReaderNextRecord_lime_h)
00152 int limeReaderNextRecord(LimeReader *r)
00153 {
00154 vector int sys_rval;
00155
00156 if (r == NULL || r->fp == NULL) {
00157 return LIME_EOF;
00158 }
00159
00160
00161 if (r->hdr == NULL) {
00162 r->hdr = (LimeRecordHeader*) malloc(sizeof(LimeRecordHeader));
00163 }
00164
00165
00166 asm("\t$io_start\n"
00167 "\t$io_fd(0.%1)\n"
00168 "\t\\equl $cmd $SYS_IOCMD_LIME_HRD\n"
00169 "\t\\equl $fmt $SYS_IOFMT_BIN\n"
00170 "\t\\equl $dev $SYS_IODEV_MEM\n"
00171 "\t\\equl $l $SYS_LIME_HDRLEN\n"
00172 "\t\\equl $bs $SYS_IOBS_V\n"
00173 "\t\\equl $rdflg $SYS_IORDFLG_NOP\n"
00174 "\t\\equl $addr 0.%2\n"
00175 "\t$io_packet($cmd, $fmt, $rdflg, $dev, $l, $bs, $addr)\n"
00176 "\t$io_end\n"
00177 "\tlmtr %0 $MEM_SYS_RVAL\n"
00178 : "=r" (sys_rval) : "r" (r->fp->fd), "r" (r->hdr));
00179
00180 return (int) sys_rval.lo;
00181 }
00182 #endif
00183 #endif
00184
00185
00186
00202
00203 #ifndef __HAS_MAIN
00204 extern int limeReaderMBFlag(LimeReader *);
00205 #else
00206 #if !defined(__cflow_processed) || defined(_uses_limeReaderMBFlag_lime_h)
00207 int limeReaderMBFlag(LimeReader *r)
00208 {
00209 int mbflg = -1;
00210
00211 where (r != NULL && r->hdr != NULL) {
00212 mbflg = (r->hdr->ctrl >> 47) & 0x1;
00213 }
00214
00215 return mbflg;
00216 }
00217 #endif
00218 #endif
00219
00220
00221
00237
00238 #ifndef __HAS_MAIN
00239 extern int limeReaderMEFlag(LimeReader *);
00240 #else
00241 #if !defined(__cflow_processed) || defined(_uses_limeReaderMEFlag_lime_h)
00242 int limeReaderMEFlag(LimeReader *r)
00243 {
00244 int meflg = -1;
00245
00246 where (r != NULL && r->hdr != NULL) {
00247 meflg = (r->hdr->ctrl >> 46) & 0x1;
00248 }
00249
00250 return meflg;
00251 }
00252 #endif
00253 #endif
00254
00255
00256
00272
00273 #ifndef __HAS_MAIN
00274 extern char* limeReaderType(LimeReader *);
00275 #else
00276 #if !defined(__cflow_processed) || defined(_uses_limeReaderType_lime_h)
00277 char* limeReaderType(LimeReader *r)
00278 {
00279 char* type = NULL;
00280
00281 where (r != NULL && r->hdr != NULL) {
00282 type = (char*) &(r->hdr->type);
00283 }
00284
00285 return type;
00286 }
00287 #endif
00288 #endif
00289
00290
00291
00307
00308 #ifndef __HAS_MAIN
00309 extern uint64_t limeReaderBytes(LimeReader *);
00310 #else
00311 #if !defined(__cflow_processed) || defined(_uses_limeReaderBytes_lime_h)
00312 uint64_t limeReaderBytes(LimeReader *r)
00313 {
00314 int nbytes = -1;
00315
00316 where (r != NULL && r->hdr != NULL) {
00317 nbytes = r->hdr->nbytes;
00318 }
00319
00320 return nbytes;
00321 }
00322 #endif
00323 #endif
00324
00325
00326
00342
00343 #ifndef __HAS_MAIN
00344 extern size_t limeReaderPadBytes(LimeReader *);
00345 #else
00346 #if !defined(__cflow_processed) || defined(_uses_limeReaderBytes_lime_h)
00347 size_t limeReaderPadBytes(LimeReader *r)
00348 {
00349 int npadbytes = -1;
00350
00351 where (r != NULL && r->hdr != NULL) {
00352 npadbytes = (r->hdr->nbytes) % 8;
00353 }
00354
00355 return npadbytes;
00356 }
00357 #endif
00358 #endif
00359
00360
00361
00380
00381 #define limeReaderReadData(PTR, NMEMB, STREAM) \
00382 __limeReaderReadData(__typecode(*PTR), PTR, NMEMB, STREAM)
00383
00384 #ifndef __HAS_MAIN
00385 extern int __limeReaderReadData(int, void *, uint64_t *, LimeReader *);
00386 #else
00387 #if !defined(__cflow_processed) || defined(_uses___limeReaderReadData_lime_h)
00388 int __limeReaderReadData(int tcode, void *dest, uint64_t *nbytes, LimeReader *r)
00389 {
00390 int nword;
00391 vector int sys_rval;
00392
00393 if (r == NULL || r->fp == NULL)
00394 return LIME_ERR_PARAM;
00395
00396 #define __iopacket(rdflg) \
00397 asm("\t$io_start\n" \
00398 "\t\\equl $cmd $SYS_IOCMD_LIME_BRD\n" \
00399 "\t\\equl $fmt $SYS_IOFMT_BIN\n" \
00400 "\t\\equl $sep $SYS_IOPSEP_NOP\n" \
00401 "\t\\equl $rdflg %1\n" \
00402 "\t\\equl $dev $SYS_IODEV_MEM\n" \
00403 "\t\\equl $l 0.%2\n" \
00404 "\t\\equl $bs $SYS_IOBS_V\n" \
00405 "\t$io_fd( 0.%3 )\n" \
00406 "\t$io_slice_all\n" \
00407 "\t$io_packet($cmd, <$fmt .or. $sep>, $rdflg, $dev, $l, $bs, 0.%4)\n" \
00408 "\t$io_end\n" \
00409 "\tlmtr %0 $MEM_SYS_RVAL\n" \
00410 : "=r" (sys_rval) : "I" (rdflg), "r" (nword), "r" (r->fp->fd), "r" (dest))
00411
00412 if ((tcode==NLCC_FLOAT) || (tcode==NLCC_DOUBLE)) {
00413 nword = (*nbytes) >> 3;
00414 __iopacket(_SYS_IORDFLG_HZERO);
00415 }
00416 else if ((tcode==NLCC_INT) || (tcode==NLCC_UNSIGNED)) {
00417 nword = (*nbytes) >> 3;
00418 __iopacket(_SYS_IORDFLG_HMIRROR);
00419 }
00420 else if ((tcode==NLCC_COMPLEX) || (tcode==NLCC_VECTOR) || (tcode==NLCC_VFLOAT) ||
00421 (tcode==NLCC_VINT) || (tcode==NLCC_VUINT)) {
00422 nword = (*nbytes) >> 4;
00423 __iopacket(_SYS_IORDFLG_NOP);
00424 }
00425 else {
00426 assert(0);
00427 }
00428 (*nbytes) = (int) sys_rval.hi;
00429
00430 #undef __iopacket
00431
00432 return (int) sys_rval.lo;
00433 }
00434 #endif
00435 #endif
00436
00437
00438
00460
00461 #define limeReaderSliceReadData(X0, Y0, Z0, X1, Y1, Z1, PTR, NMEMB, STREAM) \
00462 __limeReaderSliceReadData(X0, Y0, Z0, X1, Y1, Z1, \
00463 __typecode(*PTR), PTR, NMEMB, STREAM)
00464
00465 #ifndef __HAS_MAIN
00466 extern int __limeReaderSliceReadData(int, int, int, int, int, int,
00467 int, void *, uint64_t *, LimeReader *);
00468 #else
00469 #if !defined(__cflow_processed) || defined(_uses___limeReaderSliceReadData_lime_h)
00470 int __limeReaderSliceReadData(int x0, int y0, int z0, int x1, int y1, int z1,
00471 int tcode, void *dest, uint64_t *nbytes, LimeReader *r)
00472 {
00473 int nword;
00474 vector int sys_rval;
00475
00476 if (r == NULL || r->fp == NULL)
00477 return LIME_ERR_READ;
00478
00479 #define __iopacket(rdflg) \
00480 asm("\t$io_start\n" \
00481 "\t\\equl $cmd $SYS_IOCMD_LIME_MRD\n" \
00482 "\t\\equl $fmt $SYS_IOFMT_BIN\n" \
00483 "\t\\equl $sep $SYS_IOPSEP_NOP\n" \
00484 "\t\\equl $rdflg %0\n" \
00485 "\t\\equl $dev $SYS_IODEV_MEM\n" \
00486 "\t\\equl $l 0.%1\n" \
00487 "\t\\equl $bs $SYS_IOBS_V\n" \
00488 "\t$io_fd(0.%2)\n" \
00489 "\t$io_slice(0.%3,0.%4,0.%5,0.%6,0.%7,0.%8)\n" \
00490 "\t$io_packet($cmd, <$fmt .or. $sep>, $rdflg, $dev, $l, $bs, 0.%9)\n" \
00491 "\t$io_end\n" \
00492 :: "I" (rdflg), "r" (nword), "r" (r->fp->fd), \
00493 "r" (x0), "r" (y0), "r" (z0), \
00494 "r" (x1), "r" (y1), "r" (z1), \
00495 "r" (dest)); \
00496 asm("\tlmtr %0 $MEM_SYS_RVAL\n" : "=r" (sys_rval))
00497
00498 if ((tcode==NLCC_FLOAT) || (tcode==NLCC_DOUBLE)) {
00499 nword = (*nbytes) >> 3;
00500 __iopacket(_SYS_IORDFLG_HZERO);
00501 }
00502 else if ((tcode==NLCC_INT) || (tcode==NLCC_UNSIGNED)) {
00503 nword = (*nbytes) >> 3;
00504 __iopacket(_SYS_IORDFLG_HMIRROR);
00505 }
00506 else if ((tcode==NLCC_COMPLEX) || (tcode==NLCC_VECTOR) || (tcode==NLCC_VFLOAT) ||
00507 (tcode==NLCC_VINT) || (tcode==NLCC_VUINT)) {
00508 nword = (*nbytes) >> 4;
00509 __iopacket(_SYS_IORDFLG_NOP);
00510 }
00511 else {
00512 assert(0);
00513 }
00514 (*nbytes) = (int) sys_rval.hi;
00515
00516 #undef __iopacket
00517
00518 return (int) sys_rval.lo;
00519 }
00520 #endif
00521 #endif
00522
00523
00524
00537
00538 #ifndef __HAS_MAIN
00539 extern int limeReaderCloseRecord(LimeReader *);
00540 #else
00541 #if !defined(__cflow_processed) || defined(_uses_limeReaderCloseRecord_lime_h)
00542 int limeReaderCloseRecord(LimeReader *r)
00543 {
00544 if (r == NULL) {
00545 return LIME_ERR_SEEK;
00546 }
00547
00548
00549 asm("\t$lime_closerecord($SYS_LIMEFLG_RD, 0.%0)\n" : : "r" (r->fp->fd));
00550
00551 return LIME_SUCCESS;
00552 }
00553 #endif
00554 #endif
00555
00556
00557
00570
00571 #ifndef __HAS_MAIN
00572 extern int limeReaderSeek(LimeReader *, off_t, int);
00573 #else
00574 #if !defined(__cflow_processed) || defined(_uses_limeReaderSeek_lime_h)
00575 int limeReaderSeek(LimeReader *r, off_t offset, int whence)
00576 {
00577 int sys_whence;
00578
00579 if (r == NULL) {
00580 return LIME_ERR_SEEK;
00581 }
00582
00583 sys_whence = -1;
00584 where (whence == SEEK_SET)
00585 asm("$sys_setwhence(%0, $SYS_FSE_SET)\n" : "=r" (sys_whence));
00586 where (whence == SEEK_CUR)
00587 asm("$sys_setwhence(%0, $SYS_FSE_CUR)\n" : "=r" (sys_whence));
00588 where (whence == SEEK_END)
00589 asm("$sys_setwhence(%0, $SYS_FSE_END)\n" : "=r" (sys_whence));
00590 if (sys_whence < 0) {
00591 errno = EINVAL;
00592 return LIME_ERR_SEEK;
00593 }
00594
00595
00596 asm("\t$lime_seek($SYS_LIMEFLG_RD, 0.%0, 0.%1, %2)\n"
00597 : : "r" (r->fp->fd), "r" (offset), "r" (sys_whence));
00598
00599 return LIME_SUCCESS;
00600 }
00601 #endif
00602 #endif
00603
00604
00605
00621
00622 #ifndef __HAS_MAIN
00623 extern LimeWriter* limeCreateWriter(FILE *);
00624 #else
00625 #if !defined(__cflow_processed) || defined(_uses_limeCreateWriter_lime_h)
00626 LimeWriter* limeCreateWriter(FILE *fp)
00627 {
00628 LimeWriter *w;
00629
00630 if (!fp || !fp->fd) {
00631 errno = EBADF;
00632 return NULL;
00633 }
00634
00635 w = (LimeWriter*) malloc(sizeof(LimeWriter));
00636
00637 if (w == NULL)
00638 return NULL;
00639
00640 w->fp = fp;
00641 w->hdr = NULL;
00642
00643 asm("\t$lime_create($SYS_LIMEFLG_WR, 0.%0)\n" : : "r" (fp->fd));
00644
00645 return w;
00646 }
00647 #endif
00648 #endif
00649
00650
00651
00669
00670 #ifndef __HAS_MAIN
00671 extern int limeDestroyWriter(LimeWriter *);
00672 #else
00673 #if !defined(__cflow_processed) || defined(_uses_limeDestroyWriter_lime_h)
00674 int limeDestroyWriter(LimeWriter *w)
00675 {
00676 if (w != NULL) {
00677 asm("\t$lime_destroy($SYS_LIMEFLG_WR, 0.%0)\n" : : "r" (w->fp->fd));
00678 free(w);
00679 w = NULL;
00680 return LIME_SUCCESS;
00681 }
00682 else
00683 return 0;
00684 }
00685 #endif
00686 #endif
00687
00688
00689
00706
00707 #ifndef __HAS_MAIN
00708 extern int limeWriteRecordHeader(LimeRecordHeader *, LimeWriter *);
00709 #else
00710 #if !defined(__cflow_processed) || defined(_uses_limeWriteRecordHeader_lime_h)
00711 int limeWriteRecordHeader(LimeRecordHeader *h, LimeWriter* w)
00712 {
00713 int ret = LIME_SUCCESS;
00714 vector int sys_rval;
00715
00716 if (w == NULL || w->fp == NULL || h == NULL) {
00717 return LIME_ERR_PARAM;
00718 }
00719
00720 w->hdr = h;
00721
00722
00723 asm("\t$io_start\n"
00724 "\t$io_fd(0.%1)\n"
00725 "\t\\equl $cmd $SYS_IOCMD_LIME_HWR\n"
00726 "\t\\equl $fmt $SYS_IOFMT_BIN\n"
00727 "\t\\equl $dev $SYS_IODEV_MEM\n"
00728 "\t\\equl $l $SYS_LIME_HDRLEN\n"
00729 "\t\\equl $bs $SYS_IOBS_V\n"
00730 "\t\\equl $rdflg $SYS_IORDFLG_NOP\n"
00731 "\t\\equl $addr 0.%2\n"
00732 "\t$io_packet($cmd, $fmt, $rdflg, $dev, $l, $bs, $addr)\n"
00733 "\t$io_end\n"
00734 "\tlmtr %0 $MEM_SYS_RVAL\n"
00735 : "=r" (sys_rval) : "r" (w->fp->fd), "r" (h));
00736
00737 where (sys_rval.lo) {
00738 ret = LIME_ERR_PARAM;
00739 }
00740
00741 return ret;
00742 }
00743 #endif
00744 #endif
00745
00746
00747
00763
00764 #ifndef __HAS_MAIN
00765 extern int limeWriterCloseRecord(LimeWriter *);
00766 #else
00767 #if !defined(__cflow_processed) || defined(_uses_limeWriterCloseRecord_lime_h)
00768 int limeWriterCloseRecord(LimeWriter* w)
00769 {
00770 if (w == NULL) {
00771 return LIME_ERR_SEEK;
00772 }
00773
00774
00775 asm("\t$lime_closerecord($SYS_LIMEFLG_WR, 0.%0)\n" : : "r" (w->fp->fd));
00776
00777 return LIME_SUCCESS;
00778 }
00779 #endif
00780 #endif
00781
00782
00783
00799
00800 #ifndef __HAS_MAIN
00801 extern int limeWriterSeek(LimeWriter *, off_t, int);
00802 #else
00803 #if !defined(__cflow_processed) || defined(_uses_limeWriterSeek_lime_h)
00804 int limeWriterSeek(LimeWriter* w, off_t offset, int whence)
00805 {
00806 int sys_whence;
00807
00808 if (w == NULL) {
00809 return LIME_ERR_SEEK;
00810 }
00811
00812 sys_whence = -1;
00813 where (whence == SEEK_SET)
00814 asm("$sys_setwhence(%0, $SYS_FSE_SET)\n" : "=r" (sys_whence));
00815 where (whence == SEEK_CUR)
00816 asm("$sys_setwhence(%0, $SYS_FSE_CUR)\n" : "=r" (sys_whence));
00817 where (whence == SEEK_END)
00818 asm("$sys_setwhence(%0, $SYS_FSE_END)\n" : "=r" (sys_whence));
00819 if (sys_whence < 0) {
00820 errno = EINVAL;
00821 return LIME_ERR_SEEK;
00822 }
00823
00824
00825 asm("\t$lime_seek($SYS_LIMEFLG_WR, 0.%0, 0.%1, %2)\n"
00826 : : "r" (w->fp->fd), "r" (offset), "r" (sys_whence));
00827
00828 return LIME_SUCCESS;
00829 }
00830 #endif
00831 #endif
00832
00833
00834
00856
00857 #ifndef __HAS_MAIN
00858 extern LimeRecordHeader limeCreateHeader(int, int, char*, uint64_t);
00859 #else
00860 #if !defined(__cflow_processed) || defined(_uses_limeCreateHeader_lime_h)
00861 LimeRecordHeader *limeCreateHeader(int MB_flag, int ME_flag, char *type,
00862 uint64_t rec_len)
00863 {
00864 int i;
00865 LimeRecordHeader *h;
00866
00867 h = (LimeRecordHeader *) malloc(sizeof(LimeReader));
00868
00869 h->ctrl = ((LIME_MAGIC_NO & 0xffffffff)) |
00870 ((LIME_VERSION & 0x000000ff) << 48) |
00871 ((MB_flag & 0x00000001) << 47) |
00872 ((ME_flag & 0x00000001) << 46);
00873
00874 h->nbytes = rec_len;
00875
00876 for (i = 0; i < 8; i++) {
00877 h->type[i] = *((uint64_t vector *) &type[i]);
00878 if ((uint64_t vector) type[i] == (uint64_t vector) 0)
00879 break;
00880 }
00881 for (; i < 9; i++)
00882 h->type[i] = 0;
00883
00884 return h;
00885 }
00886 #endif
00887 #endif
00888
00889
00890
00906
00907 #ifndef __HAS_MAIN
00908 extern void limeDestroyHeader(LimeRecordHeader *);
00909 #else
00910 #if !defined(__cflow_processed) || defined(_uses_limeDestroyHeader_lime_h)
00911 void limeDestroyHeader(LimeRecordHeader *h)
00912 {
00913 if (h != NULL)
00914 free(h);
00915 }
00916 #endif
00917 #endif
00918
00919
00920
00936
00937 #define limeWriteRecordData(PTR, NMEMB, STREAM) \
00938 __limeWriteRecordData(__typecode(*PTR), PTR, NMEMB, STREAM)
00939
00940 #ifndef __HAS_MAIN
00941 extern int __limeWriteRecordData(void*, uint64_t*, LimeWriter*);
00942 #else
00943 #if !defined(__cflow_processed) || defined(_uses___limeWriteRecordData_lime_h)
00944 int __limeWriteRecordData(int tcode, void *source, uint64_t *nbytes, LimeWriter* w)
00945 {
00946 int nword;
00947 vector int sys_rval;
00948
00949 if (w == NULL || w->fp == NULL)
00950 return LIME_ERR_PARAM;
00951
00952 #define __iopacket(bs) \
00953 asm("\t$io_start\n" \
00954 "\t\\equl $cmd $SYS_IOCMD_LIME_GWR\n" \
00955 "\t\\equl $fmt $SYS_IOFMT_BIN\n" \
00956 "\t\\equl $sep $SYS_IOPSEP_NOP\n" \
00957 "\t\\equl $rdflg $SYS_IORDFLG_NOP\n" \
00958 "\t\\equl $dev $SYS_IODEV_MEM\n" \
00959 "\t\\equl $l 0.%1\n" \
00960 "\t\\equl $bs %2\n" \
00961 "\t$io_fd( 0.%3 )\n" \
00962 "\t$io_slice_all\n" \
00963 "\t$io_packet($cmd, <$fmt .or. $sep>, $rdflg, $dev, $l, $bs, 0.%4)\n" \
00964 "\t$io_end\n" \
00965 "\tlmtr %0 $MEM_SYS_RVAL\n" \
00966 : "=r" (sys_rval) : "r" (nword), "I" (bs), "r" (w->fp->fd), "r" (source))
00967
00968 if ((tcode==NLCC_FLOAT) || (tcode==NLCC_DOUBLE) ||
00969 (tcode==NLCC_INT) || (tcode==NLCC_UNSIGNED)) {
00970 nword = (*nbytes) >> 3;
00971 __iopacket(_SYS_IOBS_L);
00972 }
00973 else if ((tcode==NLCC_COMPLEX) || (tcode==NLCC_VECTOR) || (tcode==NLCC_VFLOAT) ||
00974 (tcode==NLCC_VINT) || (tcode==NLCC_VUINT)) {
00975 nword = (*nbytes) >> 4;
00976 __iopacket(_SYS_IOBS_V);
00977 }
00978 else {
00979 assert(0);
00980 }
00981 (*nbytes) = (int) sys_rval.hi;
00982
00983 #undef __iopacket
00984
00985 return (int) sys_rval.lo;
00986 }
00987 #endif
00988 #endif
00989
00990
00991
01009
01010 #define limeSliceWriteRecordData(X0, Y0, Z0, X1, Y1, Z1, PTR, NMEMB, STREAM) \
01011 __limeSliceWriteRecordData(X0, Y0, Z0, X1, Y1, Z1, \
01012 __typecode(*PTR), PTR, NMEMB, STREAM)
01013
01014 #ifndef __HAS_MAIN
01015 extern int __limeSliceWriteRecordData(int, int, int, int, int, int,
01016 void*, uint64_t*, LimeWriter*);
01017 #else
01018 #if !defined(__cflow_processed) || defined(_uses___limeSliceWriteRecordData_lime_h)
01019 int __limeSliceWriteRecordData(int x0, int y0, int z0, int x1, int y1, int z1,
01020 int tcode, void *source, uint64_t *nbytes,
01021 LimeWriter* w)
01022 {
01023 int nword;
01024 vector int sys_rval;
01025
01026 if (w == NULL || w->fp == NULL)
01027 return LIME_ERR_WRITE;
01028
01029 #define __iopacket(bs) \
01030 asm("\t$io_start\n" \
01031 "\t\\equl $cmd $SYS_IOCMD_LIME_SWR\n" \
01032 "\t\\equl $fmt $SYS_IOFMT_BIN\n" \
01033 "\t\\equl $sep $SYS_IOPSEP_NOP\n" \
01034 "\t\\equl $rdflg $SYS_IORDFLG_NOP\n" \
01035 "\t\\equl $dev $SYS_IODEV_MEM\n" \
01036 "\t\\equl $l 0.%0\n" \
01037 "\t\\equl $bs %1\n" \
01038 "\t$io_fd(0.%2)\n" \
01039 "\t$io_slice(0.%3,0.%4,0.%5,0.%6,0.%7,0.%8)\n" \
01040 "\t$io_packet($cmd, <$fmt .or. $sep>, $rdflg, $dev, $l, $bs, 0.%9)\n" \
01041 "\t$io_end\n" \
01042 "\tlmtr %0 $MEM_SYS_RVAL\n" \
01043 :: "r" (nword), "I" (bs), "r" (w->fp->fd), \
01044 "r" (x0), "r" (y0), "r" (z0), \
01045 "r" (x1), "r" (y1), "r" (z1), \
01046 "r" (source)); \
01047 asm("\tlmtr %0 $MEM_SYS_RVAL\n" : "=r" (sys_rval))
01048
01049 if ((tcode==NLCC_FLOAT) || (tcode==NLCC_DOUBLE) ||
01050 (tcode==NLCC_INT) || (tcode==NLCC_UNSIGNED)) {
01051 nword = (*nbytes) >> 3;
01052 __iopacket(_SYS_IOBS_L);
01053 }
01054 else if ((tcode==NLCC_COMPLEX) || (tcode==NLCC_VECTOR) || (tcode==NLCC_VFLOAT) ||
01055 (tcode==NLCC_VINT) || (tcode==NLCC_VUINT)) {
01056 nword = (*nbytes) >> 4;
01057 __iopacket(_SYS_IOBS_V);
01058 }
01059 else {
01060 assert(0);
01061 }
01062 (*nbytes) = (int) sys_rval.hi;
01063
01064 #undef __iopacket
01065
01066 return (int) sys_rval.lo;
01067 }
01068 #endif
01069 #endif
01070
01071 #endif