8945 %} 8946 8947 // TODO 8948 // implement storeImmF0 and storeFImmPacked 8949 8950 // Store Double 8951 instruct storeD_volatile(vRegD src, /* sync_memory*/indirect mem) 8952 %{ 8953 match(Set mem (StoreD mem src)); 8954 8955 ins_cost(VOLATILE_REF_COST); 8956 format %{ "stlrd $src, $mem\t# double" %} 8957 8958 ins_encode( aarch64_enc_fstlrd(src, mem) ); 8959 8960 ins_pipe(pipe_class_memory); 8961 %} 8962 8963 // ---------------- end of volatile loads and stores ---------------- 8964 8965 // ============================================================================ 8966 // BSWAP Instructions 8967 8968 instruct bytes_reverse_int(iRegINoSp dst, iRegIorL2I src) %{ 8969 match(Set dst (ReverseBytesI src)); 8970 8971 ins_cost(INSN_COST); 8972 format %{ "revw $dst, $src" %} 8973 8974 ins_encode %{ 8975 __ revw(as_Register($dst$$reg), as_Register($src$$reg)); 8976 %} 8977 8978 ins_pipe(ialu_reg); 8979 %} 8980 8981 instruct bytes_reverse_long(iRegLNoSp dst, iRegL src) %{ 8982 match(Set dst (ReverseBytesL src)); 8983 8984 ins_cost(INSN_COST); | 8945 %} 8946 8947 // TODO 8948 // implement storeImmF0 and storeFImmPacked 8949 8950 // Store Double 8951 instruct storeD_volatile(vRegD src, /* sync_memory*/indirect mem) 8952 %{ 8953 match(Set mem (StoreD mem src)); 8954 8955 ins_cost(VOLATILE_REF_COST); 8956 format %{ "stlrd $src, $mem\t# double" %} 8957 8958 ins_encode( aarch64_enc_fstlrd(src, mem) ); 8959 8960 ins_pipe(pipe_class_memory); 8961 %} 8962 8963 // ---------------- end of volatile loads and stores ---------------- 8964 8965 instruct cacheWB(indirect addr) 8966 %{ 8967 match(CacheWB addr); 8968 8969 ins_cost(100); 8970 format %{"cache wb $addr" %} 8971 ins_encode %{ 8972 assert($addr->index_position() < 0, "should be"); 8973 assert($addr$$disp == 0, "should be"); 8974 __ cache_wb(Address($addr$$base$$Register, 0)); 8975 %} 8976 ins_pipe(pipe_slow); // XXX 8977 %} 8978 8979 instruct cacheWBPreSync() 8980 %{ 8981 match(CacheWBPreSync); 8982 8983 ins_cost(100); 8984 format %{"cache wb presync" %} 8985 ins_encode %{ 8986 __ cache_wbsync(true); 8987 %} 8988 ins_pipe(pipe_slow); // XXX 8989 %} 8990 8991 instruct cacheWBPostSync() 8992 %{ 8993 match(CacheWBPostSync); 8994 8995 ins_cost(100); 8996 format %{"cache wb postsync" %} 8997 ins_encode %{ 8998 __ cache_wbsync(false); 8999 %} 9000 ins_pipe(pipe_slow); // XXX 9001 %} 9002 9003 // ============================================================================ 9004 // BSWAP Instructions 9005 9006 instruct bytes_reverse_int(iRegINoSp dst, iRegIorL2I src) %{ 9007 match(Set dst (ReverseBytesI src)); 9008 9009 ins_cost(INSN_COST); 9010 format %{ "revw $dst, $src" %} 9011 9012 ins_encode %{ 9013 __ revw(as_Register($dst$$reg), as_Register($src$$reg)); 9014 %} 9015 9016 ins_pipe(ialu_reg); 9017 %} 9018 9019 instruct bytes_reverse_long(iRegLNoSp dst, iRegL src) %{ 9020 match(Set dst (ReverseBytesL src)); 9021 9022 ins_cost(INSN_COST); |