void CppInterpreterGenerator::generate_convert_result(address* converter_array) { __ load (r5, (intptr_t) converter_array); __ lwz (r0, Address(Rmethod, methodOopDesc::result_index_offset())); __ shift_left (r0, r0, LogBytesPerWord); __ load_indexed (r0, r5, r0); __ mtctr (r0); __ bctrl (); }
ImageLoad( long version, GlobalFunc *global, LWImageLoaderLocal *local, void *serverData ) { PicInfo *pic = NULL; int result; if ( version != LWIMAGELOADER_VERSION ) return AFUNC_BADVERSION; pic = ReadILBM( local->filename, &result ); if ( !pic ) { switch ( result ) { case EPNOFILE: local->result = IPSTAT_BADFILE; break; case EPNOMEM: local->result = IPSTAT_FAILED; break; default: local->result = IPSTAT_NOREC; break; } return AFUNC_OK; } if (( pic->bmhd.nPlanes == 24 ) || ( pic->camg & CAMG_HAM )) load_24( local, pic ); else if ( pic->isgray ) load_gray( local, pic ); else load_indexed( local, pic ); FreeILBM( pic ); return AFUNC_OK; }
address InterpreterGenerator::generate_accessor_entry() { if (!UseFastAccessorMethods) return NULL; Label& slow_path = fast_accessor_slow_entry_path; address start = __ pc(); // Drop into the slow path if we need a safepoint check. __ load (r3, (intptr_t) SafepointSynchronize::address_of_state()); __ load (r0, Address(r3, 0)); __ compare (r0, SafepointSynchronize::_not_synchronized); __ bne (slow_path); // Load the object pointer and drop into the slow path // if we have a NullPointerException. const Register object = r4; __ load (object, Address(Rlocals, 0)); __ compare (object, 0); __ beq (slow_path); // Read the field index from the bytecode, which looks like this: // 0: 0x2a: aload_0 // 1: 0xb4: getfield // 2: index (high byte) // 3: index (low byte) // 4: 0xac/b0: ireturn/areturn const Register index = r5; __ load (index, Address(Rmethod, methodOopDesc::const_offset())); __ lwz (index, Address(index, constMethodOopDesc::codes_offset())); #ifdef ASSERT { Label ok; __ shift_right (r0, index, 16); __ compare (r0, (Bytecodes::_aload_0 << 8) | Bytecodes::_getfield); __ beq (ok); __ should_not_reach_here (__FILE__, __LINE__); __ bind (ok); } #endif __ andi_ (index, index, 0xffff); // Locate the entry in the constant pool cache const Register entry = r6; __ load (entry, Address(Rmethod, methodOopDesc::constants_offset())); __ load (entry, Address(entry,constantPoolOopDesc::cache_offset_in_bytes())); __ la (entry, Address(entry, constantPoolCacheOopDesc::base_offset())); __ shift_left(r0, index, exact_log2(in_words(ConstantPoolCacheEntry::size())) + LogBytesPerWord); __ add (entry, entry, r0); // Check the validity of the cache entry by testing whether the // _indices field contains Bytecode::_getfield in b1 byte. __ load (r0, Address(entry, ConstantPoolCacheEntry::indices_offset())); __ shift_right (r0, r0, 16); __ andi_ (r0, r0, 0xff); __ compare (r0, Bytecodes::_getfield); __ bne (slow_path); // Calculate the type and offset of the field const Register offset = r7; const Register type = r8; __ load (offset, Address(entry, ConstantPoolCacheEntry::f2_offset())); __ load (type, Address(entry, ConstantPoolCacheEntry::flags_offset())); ConstantPoolCacheEntry::verify_tosBits(); __ shift_right (type, type, ConstantPoolCacheEntry::tosBits); // Load the value Label is_object, is_int, is_byte, is_short, is_char; __ compare (type, atos); __ beq (is_object); __ compare (type, itos); __ beq (is_int); __ compare (type, btos); __ beq (is_byte); __ compare (type, stos); __ beq (is_short); __ compare (type, ctos); __ beq (is_char); __ load (r3, (intptr_t) "error: unknown type: %d\n"); __ mr (r4, type); __ call (CAST_FROM_FN_PTR(address, printf)); __ should_not_reach_here (__FILE__, __LINE__); __ bind (is_object); __ load_indexed (r3, object, offset); __ blr (); __ bind (is_int); __ lwax (r3, object, offset); __ blr (); __ bind (is_byte); __ lbax (r3, object, offset); __ blr (); __ bind (is_short); __ lhax (r3, object, offset); __ blr (); __ bind (is_char); __ lhzx (r3, object, offset); __ blr (); return start; }
static fz_error pdf_load_colorspace_imp(fz_colorspace **csp, pdf_xref *xref, fz_obj *obj) { if (fz_is_name(obj)) { if (!strcmp(fz_to_name(obj), "Pattern")) *csp = fz_device_gray; else if (!strcmp(fz_to_name(obj), "G")) *csp = fz_device_gray; else if (!strcmp(fz_to_name(obj), "RGB")) *csp = fz_device_rgb; else if (!strcmp(fz_to_name(obj), "CMYK")) *csp = fz_device_cmyk; else if (!strcmp(fz_to_name(obj), "DeviceGray")) *csp = fz_device_gray; else if (!strcmp(fz_to_name(obj), "DeviceRGB")) *csp = fz_device_rgb; else if (!strcmp(fz_to_name(obj), "DeviceCMYK")) *csp = fz_device_cmyk; else return fz_throw("unknown colorspace: %s", fz_to_name(obj)); return fz_okay; } else if (fz_is_array(obj)) { fz_obj *name = fz_array_get(obj, 0); if (fz_is_name(name)) { /* load base colorspace instead */ if (!strcmp(fz_to_name(name), "Pattern")) { fz_error error; obj = fz_array_get(obj, 1); if (!obj) { *csp = fz_device_gray; return fz_okay; } error = pdf_load_colorspace(csp, xref, obj); if (error) return fz_rethrow(error, "cannot load pattern (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); } else if (!strcmp(fz_to_name(name), "G")) *csp = fz_device_gray; else if (!strcmp(fz_to_name(name), "RGB")) *csp = fz_device_rgb; else if (!strcmp(fz_to_name(name), "CMYK")) *csp = fz_device_cmyk; else if (!strcmp(fz_to_name(name), "DeviceGray")) *csp = fz_device_gray; else if (!strcmp(fz_to_name(name), "DeviceRGB")) *csp = fz_device_rgb; else if (!strcmp(fz_to_name(name), "DeviceCMYK")) *csp = fz_device_cmyk; else if (!strcmp(fz_to_name(name), "CalGray")) *csp = fz_device_gray; else if (!strcmp(fz_to_name(name), "CalRGB")) *csp = fz_device_rgb; else if (!strcmp(fz_to_name(name), "CalCMYK")) *csp = fz_device_cmyk; else if (!strcmp(fz_to_name(name), "Lab")) *csp = fz_device_lab; else if (!strcmp(fz_to_name(name), "ICCBased")) return load_icc_based(csp, xref, fz_array_get(obj, 1)); else if (!strcmp(fz_to_name(name), "Indexed")) return load_indexed(csp, xref, obj); else if (!strcmp(fz_to_name(name), "I")) return load_indexed(csp, xref, obj); else if (!strcmp(fz_to_name(name), "Separation")) return load_separation(csp, xref, obj); else if (!strcmp(fz_to_name(name), "DeviceN")) return load_separation(csp, xref, obj); else return fz_throw("syntaxerror: unknown colorspace %s", fz_to_name(name)); return fz_okay; } } return fz_throw("syntaxerror: could not parse color space (%d %d R)", fz_to_num(obj), fz_to_gen(obj)); }