Main Page | Alphabetical List | Class List | File List | Class Members | File Members

lime.h

Go to the documentation of this file.
00001 /* =============
00002  * apeNEXT/nlibc
00003  * =============
00004  *
00005  * $Id: lime.h,v 1.1 2006/06/08 14:15:05 pleiter Exp $
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   // Allocate memory if necessary
00161   if (r->hdr == NULL) {
00162     r->hdr = (LimeRecordHeader*) malloc(sizeof(LimeRecordHeader));
00163   }
00164 
00165   // Perform system service
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   // Perform system service
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   // Perform system service
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   // Perform system service
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   // Perform system service
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   // Perform system service
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 /* _NLIBC_OS1_LIME_H */

Generated on Fri Jul 14 10:51:31 2006 for nlibc by doxygen 1.3.5